|
|
DataMuseum.dkPresents historical artifacts from the history of: Rational R1000/400 Tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about Rational R1000/400 Tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: B T
Length: 1979 (0x7bb)
Types: TextFile
Names: »B«
└─⟦180fe333a⟧ Bits:30000405 8mm tape, Rational 1000, SW CATALOG, 10_20_0
└─⟦180fe333a⟧ Bits:30000537 8mm tape, Rational 1000, SW Catalog 10_20_0
└─⟦5cb1d1d7f⟧ »DATA«
└─⟦3b1ee7bd8⟧
└─⟦this⟧
package body Readers_Writers is
task body Control is
Read_Count : Natural := 0;
begin
loop
select
-- REMOVE THE FIRST READER OR WRITER FROM THE QUEUE
accept Start (Mode : Service) do
if Mode = Read then
Read_Count := Read_Count + 1;
else
-- WHEN WRITER, WAIT FOR READERS WHICH HAVE ALREADY
-- STARTED TO FINISH BEFORE ALLOWING THE WRITER TO
-- PERFORM THE UPDATE
while Read_Count > 0 loop
-- WHEN A WRITE IS PENDING, READERS STOP HERE
accept Stop;
Read_Count := Read_Count - 1;
end loop;
end if;
end Start;
if Read_Count = 0 then
-- WAIT FOR WRITER TO STOP BEFORE ALLOWING
-- OTHER READERS OR WRITERS TO START
accept Stop;
end if;
or
-- WHEN NO WRITE IS PENDING, READERS STOP HERE
accept Stop;
Read_Count := Read_Count - 1;
or
-- QUIT WHEN EVERYONE AGREES TO DO SO
terminate;
end select;
end loop;
end Control;
end Readers_Writers;
-- THIS PACKAGE ALLOWS ANY NUMBER OF CONCURRENT PROGRAMS TO READ
-- AND/OR INDIVISIBLY WRITE A PARTICULAR (POSSIBLY COMPOSITE)
-- VARIABLE OBJECT WITHOUT INTERFERENCE AND IN FIFO ORDER.
-- SIMILAR PACKAGES CAN BE CONSTRUCTED TO PERFORM PARTIAL READS
-- AND WRITES OF COMPOSITE OBJECTS. IF SERVICE CANNOT BE STARTED
-- BEFORE THE APPROPRIATE TIME LIMIT EXPIRES, THE EXCEPTION
-- TIMED_OUT WILL BE RAISED. (BY DEFAULT, SERVICE MUST BE STARTED
-- WITHIN DURATION'LAST (24+) HOURS. SETTING THE TIME LIMITS TO
-- 0.0 WILL REQUIRE IMMEDIATE SERVICE.)
--