[comp.lang.ada] shared variable between tasks

tancheeh@fred.cs.washington.edu (Nicholas Tan Chee Hiang) (06/29/89)

I am trying to understand concurrency in Ada.  Can someone please tell
me why the variable Unprotected below is never updated?  Thanks!

- N

------------------------------>code below<------------------------------

with Text_IO;  use Text_IO;

procedure Unprotected_Shared_Variable is
  Unprotected : Character := '*';
  pragma SHARED(Unprotected);

  task Write_Letter_A_To_Variable;
  task Access_Variable;

  task body Write_Letter_A_To_Variable is
    Letter : constant Character := 'A';
  begin
    loop
      Unprotected := Letter;
      delay 0.5;
    end loop;
  end Write_Letter_A_To_Variable;

  task body Access_Variable is
    Letter : Character := Unprotected;
  begin
    loop
      Put (Letter);
      delay 3.0;
    end loop;
  end Access_Variable;

begin
  null;
end Unprotected_Shared_Variable;

guzzi@multimax (Mark D. Guzzi) (06/29/89)

Unprotected never appears to be updated because you read it once in
task Access_Variable when you initialize Letter, then you never read it
again.   Try this instead:

	  task body Access_Variable is
	--    Letter : Character := Unprotected;
	  begin
	    loop
	--      Put (Letter);
	      Put (Unprotected);
	      delay 3.0;
	    end loop;
	  end Access_Variable;
-- 
				       -- Mark Guzzi
					  Encore Computer Corporation
					  guzzi@encore.com
					     (or guzzi@multimax.encore.com)