当时老师在课上讲的时候就没搞懂
现在要写作业了果然还是得靠自己学明白啊=_=
下面的概念都来自于《操作系统概念》这本书
首先说一下临界区问题(Critical Section Problem)
临界区的问题的解答必须满足以下三个条件:
1) 互斥:如果进程Pi在其临界区内执行,那么其他进程都不能在其临界区内执行。
2) 有空让进:如果没有进程在其临界区内执行且有进程需进入临界区,那么只有那些不在剩余区内执行的进程可参加选择,以确定谁能下一个进入临界区,且这种选择不能无限推迟。
3) 有限等待:从一个进程做出进入其临界区的请求,直到该请求允许为止,其他进程被允许进入其临界区的次数有上限。
接下来说一下
Peterson算法
Peterson算法是一个实现互斥锁的并发程序设计算法,核心就是三个标志位是怎样控制两个方法对临界区的访问,这个算法设计的想当精妙,我刚开始看的时候就被绕了一下。
算法使用两个控制变量flag与turn.
其中flag
的值为真,表示ID号为n的进程希望进入该临界区.
标量turn保存有权访问共享资源的进程的ID号.
flag[] is boolean array; and turn is an integer flag[0] = false; flag[1] = false; turn;
当时不明白这个算法关键是其中的一句话很迷惑不知道怎么理解
while (flag[j] == true && turn == j);
恩,就是这个很坑,为什么进程j想要进去并且也轮到它了它会在一直死循环等待呢?