Dinning Philosophers Using Condition Variables
There is something wrong with this pseudo-code, but I can't tell what it is.
Could you help?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
|
class Monitor R()
{
bool forks[5]; // all true
condition c[5];
void pickup(i)
{
left =i;
right=(i+1)%5;
if (forks[left])
forks[left]=F;
if (forks[right])
forks[right]=F;
while( forks[left]==F || forks[right]==F )
wait(c[i])
forks[left]=F;
forks[right]=F;
}
void putdown(i)
{
lphil=(i+4)%5;
rphil=(i+1)%5;
left=i;
right=(i+1)%5;
forks[left]=T;
forks[right]=T;
signal( c[lphil]);
signal( c[rphil] );
}
}
|
Topic archived. No new replies allowed.