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.