进程互斥的软件实现:Dekker算法
接下来,我会介绍Dekker算法(1、2、3、4),并比较四种Dekker算法的特点和区别。
Dekker算法1:
伪代码如下:
特点:
1、引入turn(交替进入)
2、p1、p2无死锁
缺点:不满足公平性,即如果p1每秒100次、p2每秒1次,p1必须服从p2,只能每秒1次
Dekker算法2:
伪代码如下:
特点:
1、引入C1、C2,用于判断对方是否在临界区(1表示不在,0表示在)
2、解决了公平
缺点:不安全,如果P1和P2同时到达并检查对方时,可能发生同时进入。
Dekker算法3:
伪代码如下:
特点:
1、引入C1、C2(微调:先置标志)(1表示不在,0表示在)
2、保证了安全性、公平性
缺点:破坏了安全性,如果P1和P2同时到达并设置为0,导致永远无法进入
Dekker算法4:
伪代码如下:
特点:
1、引入turn、C1、C2
2、保证了安全、公平、活动
一个进程判断对方的标志为0时,不马上认为对方已经进入,这是还要根据turn进一步判断对方是否已经进入或正想进入。
P1、P2分别只对C1、C2赋值,唯独要对turn进行存取,因此不适合于分布式系统,适合Bakery。
综上所示:
以上4种Dekker算法中,Dekker算法4保证了安全性、公平性和活动性。同时引入了turn、C1和C2,不仅可以判断对方是否处于临界区,并且引入的turn可以表示处于哪个进程的时间段,就可以解决同时进入临界区的问题。