进程互斥的软件实现方法

1.单标志法
进程互斥的软件实现方法_第1张图片

缺点:

turn 表示当前允许进入临界区的进程号,而只有当前允许进入临界区的进程在访问了临界区之后,才会修改turn的值。也就是说,对于临界区的访问,一定是P0->P1->P0->P1…这样轮流访问。这种必须“轮流访问”带来的问题是,如果此时允许进入临界区的进程是P0,而P0一直不访问临界区,那么虽然临界区空闲,但是并不允许P1访问。

因此,但标志法存在的主要问题是:违背了“空闲让进”原则

2.双标志先检查法

进程互斥的软件实现方法_第2张图片
原因:进入区的“检查”和“上锁”俩个处理不是一气呵成的。“检查”后,“上锁”前可能发生进程切换。
违反了忙则等待的原则

3.双标志后检查法
进程互斥的软件实现方法_第3张图片

4.Peterson算法
进程互斥的软件实现方法_第4张图片

解决了空闲让进,忙则等待,和有限等待的原则,但是违反了让权等待的原则
就算进不去临界区但是还是会在while中,所以还是会占用CPU资源

总结:
单标志法的精髓:用了一个turn变量表示谦让的动作
双标志发的精髓:用了一个flag数组表示自己进去临界区的意愿
Peterson算法则是两个综合

其实双标志先检查法的算法思想很好,但是不可以一气呵成的完成检查和上锁,所以如果是并行的话就会出错。如果可以让检查和上锁一气呵成的话,这个算法就没有问题了.可以利用硬件的实现方法解决这个问题。

你可能感兴趣的:(操作系统os)