DataMuseum.dk

Presents historical artifacts from the history of:

Rational R1000/400 Tapes

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about Rational R1000/400 Tapes

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download
Index: B T

⟦19ad136d0⟧ TextFile

    Length: 1979 (0x7bb)
    Types: TextFile
    Names: »B«

Derivation

└─⟦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⟧ 

TextFile

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.)
--