0.哲学家就餐问题
解法之一:
- 有一个二元信号量用以避免操作的竞态条件
- 每个人有一个信号量用以标记所需叉子
- 每个人有状态 Thinking,Eating,Hungry
- 一个人可以吃,需邻居都不为Eating
#define N 5
#define LEFT (i+N-1)%N
#define RIGHT (i+1)%N
#define Thinking 0
#define Eating 1
#define Hungry 2
void take_forks(int i)
{
down(&mutex);
state[i] = Hungry;
tes