You are on page 1of 8

Process

Synchronization
Observation
Incrementing and decrementing Count variable equal number of times simultaneously.
void* increment (void* ptr) void* decrement (void* ptr)
{ {
for(unsigned int i=0;i<500000;i++) for(unsigned int i=0;i<500000;i++)
count++; count--;
} }
Analysis
Counter++ Counter-- Order in which code actually
executes
AX  counter BX  counter AX  counter
Inc ax Dec bx Inc ax
Counter  ax Counter  bx BX  counter
Dec bx
Counter  ax
Counter  bx
Solution to Critical Section Problem
(Template)
Algorithm-1
turn = 0;
while(turn != 0); //entry section while(turn != 1); //entry section

//critical section
//critical section

turn = 1; //exit section


turn = 0; //exit section
//remainder section
//remainder section
Algorithm-2
flag[2] = {0,0};
do do
{ {
flag[0]=true; flag[1]=true;
while(flag[1]); while(flag[0]);

critical section critical section

flag[0]=false; flag[1]=false;

remainder section remainder section


} while(1) } while(1)
Algorithm-3
flag[2] = {0,0}; turn = 0;
do do
{ {
flag[0]=true; flag[1]=true;
turn=1; turn=0;
while(flag[1] && turn==1); while(flag[0] && turn==0);

critical section critical section

flag[0]=false; flag[1]=false;

remainder section remainder section


} while(1) } while(1)
Valid Critical Section Problem
Solution

You might also like