Give a solution for readers-writers problem using conditional critical regions.
Solution for readers-writers problem using conditional critical regions:
Conditional critical region is a high-level synchronization construct. We suppose that a process have some local data, and a sequential program which can operate on the data. The local data can be accessed through only the sequential program which is encapsulated in same process. One process can't directly access the local data of the other process. However, processes can, share global data.
Conditional critical region synchronization construct needs that a variable v of type T, that is to be shared among several processes, be declared as v: shared T; The variable v can be accessed only within a region statement of the following form: region v while B do S;
This construct implies that, while statement S is being executed, no other process can access the variable v. while a process tries to enter the critical-section region, the Boolean expression B is calculated. If the expression is true, statement S is executed. If this is false, the process releases the mutual exclusion and is delayed till B becomes true and no other process is in the region connected with v.
Here, let A is the shared data object.
Assume that readcount is the variable which keeps track of how many processes are currently reading the object A.
Assume that writecount is the variable which keeps track of how many processes are currently writing the object A. simply one writer can update object A, at a specified time.
Both variables readcount and writecount are initialized to 0.
A writer can update the shared object A while no reader is reading the object A.
region A when( readcount = = 0 AND writecount = = 0){
......
writing is performed
...... }
A reader can read the shared object A unless a writer has acquired permission to update the object A.
region A when (readcount >=0 AND writecount = = 0){
......
reading is performed ...... }