Dekker互斥算法解析

引入Dekker互斥算法解决的是多进程访问一个临界区的保护问题和“after you”问题。

我们首先来看,两个进程访问一段临界区的互斥问题:

//P进程如下:
pturn = true;
while(qturn);

//临界区的资源

pturn = false;
//q进程如下:
qturn = true;
while(pturn);

//临界区的资源

qturn = false;

pturn=true表示P进程想访问临界区,qturn = true表示Q进程想要访问临界区。那么这两个进程对于临界区的访问会有什么问题呢?假设P进程首先开始,pturn被置为true。这时候来了一个中断,然后CPU就把P进程切下去了,换Q进程上CPU。同样,把qturn置为true,然后进入循环,此时进入了死循环,因为Q进程发现pturn = =true也就是Q进程知道了P进程也想进入临界区,所以循环一直进行,直到时间片用完,Q被切下CPU,换P进程来上CPU。同样P发现qturn==true,也就是P进程知道了Q也想上临界区,所以P进程也陷入死循环,这样两个都想进入临界区的进程,都互相谦让不进入临界区,这就是一个“after you”的问题。

那么怎么解决这个问题呢?答案就是DEKKER算法,相当于在之前这个算法的基础上做了一个改进,加上了一个turn变量,表示发现“after you”问题之后,由turn决定谁上临界区,谁不上。那么DEKKER算法如下:<

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值