--
--
-- THIS PROGRAM ILLUSTRATES USE OF TASKING TO PROVIDE SHARED ACCESS
-- TO GLOBAL VARIABLES. THE VALUES IT OUTPUTS MAY VARY FROM RUN


-- TO RUN DEPENDING ON HOW TASKING IS IMPLEMENTED.
-- A "FIFO" SOLUTION TO THE READERS/WRITERS PROBLEM.
-- AUTHORS:  GERALD FISHER AND ROBERT DEWAR.
-- (MODIFIED BY BRYCE BARDIN TO TERMINATE GRACEFULLY.)
-- MAY BE USED TO PROVIDE SHARED ACCESS TO OBJECTS BY AN
-- ARBITRARY NUMBER OF READERS AND WRITERS WHICH ARE SERVICED
-- IN ORDER FROM A SINGLE QUEUE. WRITERS ARE GIVEN UNINTERRUPTED
-- ACCESS FOR UPDATES AND READERS ARE ASSURED THAT UPDATES ARE
-- INDIVISIBLE AND THEREFORE COMPLETE WHEN READ ACCESS IS
-- GRANTED.
--
-- IF C IS A TASK OBJECT OF TYPE CONTROL AND O IS AN OBJECT WHICH
-- IS TO BE SHARED BETWEEN READERS AND WRITERS USING C, THEN:
--
--    READERS SHOULD DO:
--
--       C.START(READ);
--       <READ ALL OR PART OF O>
--       C.STOP;
--
--    AND WRITERS SHOULD DO:
--
--       C.START(WRITE);
--       <UPDATE ALL OR PART OF O>

--       C.STOP;
package Readers_Writers is

    type Service is (Read, Write);

    task type Control is
        entry Start (Mode : Service);  -- START READERS OR WRITERS
        entry Stop;                    -- STOP READERS OR WRITERS
    end Control;

end Readers_Writers;