王道yyds!
>> Peterson算法
flag[i] 表示想进入临界区的进程,turn 表示目前可以进入临界区的进程;
当j想进入且能进入临界区时,i等待。
i的进入区代码示例:
flag[i] = true;
turn = j;
while(flag[j] && turn==j);
>> PV操作要点
- 互斥关系的PV操作在同一进程内;
- 同步关系的PV操作在不同进程内;
- 互斥关系写在同步操作的内部,避免死锁现象的发生。
- 同步关系表现为操作有先后顺序,如必须先做A才能做B,即A->B,则A(V操作)->(P操作)B。
1. 生产者消费者问题
题目:生产者 -> 缓冲池 -> 消费者
解法:
2. 多-生产者消费者
题目:
解法:
也可以不要mutex互斥信号量,因为这里plate=1:
如果plate=2,就需要mutex互斥变量了,因为可能父母进入临界区后找的是同一个区域,值会被覆盖。