Yurttas/PL/IL/Ada-95/F/06/r-w/readers writers 01.adb

 1--
 2-- Copyright(C) 1998
 3-- All Rights Reserved. Salih Yurttas, ZCubes, BitsOfCode Software Systems, Inc..
 4--
 5-- Permission to use, copy, modify, and distribute this
 6-- software and its documentation for EDUCATIONAL purposes
 7-- and without fee is hereby granted provided that this
 8-- copyright notice appears in all copies.
 9--
10 
11-- date   : January 1, 1998.
12-- authorĀ : Salih Yurttas.
13
14-- readers_writers_01.adb
15
16
17procedure Readers_Writers_01 is
18
19  subtype Message is String(1..4);
20
21  M : Message := "2222";
22
23  task type R_W_Scheduler is
24    entry Start_Read;
25    entry Stop_Read;
26    entry Start_Write;
27    entry Stop_Write;
28  end R_W_Scheduler;
29
30  task body R_W_Scheduler is
31    Number_of_Readers : Integer := 0;
32  begin
33    loop
34      select 
35        when Start_Write'Count = 0 =>
36          accept Start_Read do
37            Number_of_Readers := Number_of_Readers+1;
38          end Start_Read;
39      or accept Stop_Read do
40           Number_of_Readers := Number_of_Readers-1;
41         end Stop_Read;
42      or when Number_of_Readers = 0 =>
43           accept Start_Write;
44           accept Stop_Write;
45           for I in 1..Start_Read'Count
46           loop
47             accept Start_Read do
48               Number_of_Readers := Number_of_Readers+1;
49             end Start_Read;
50           end loop;
51      end select;
52    end loop;
53  end R_W_Scheduler;
54
55begin
56
57  null;
58
59end Readers_Writers_01;