进程互斥(二)Dekker算法

假设P、Q两个进程需要互斥进入某一个临界区。


Dekker算法的基本思想是:首先看P、Q是否有进入临界区的意愿,(1)如果没有进程想进临界区,自然不用做任何事情,(2)如果只有一个进程想进临界区,就让他进入临界区,(3)如果两个进程同时都想进临界区,那么再看轮到谁进临界区了,如果刚好轮到P,P就进入临界区,Q等待,P退出临界区后Q再进入;同样,如果刚好轮到Q,Q就进入临界区,P等待,Q退出临界区后P再进入


Dekker算法的具体实施方法:

(1)设置两个布尔变量pturn,qturn。pturn为true,表示P想进入临界区,为false,表示P不想进入临界区;qturn为true,表示Q想进入临界区,为false,表示Q不想进入临界区;它们的默认值为false。

(2)设置一个整型变量turn,表示当P、Q同时想进临界区时,该谁进临界区。如果turn等于1,表示轮到P进入临界区;如果turn等于2,表示轮到Q进入临界区。

(3)具体代码(Java实现)

首先由共同变量:

	private boolean pturn = false;
	private boolean qturn = false;
	private int turn = 1;


P进程代码:

		pturn = true;// 表示P想进入临界区
		while (qturn) {// 如果Q也想进入临界区,进入循环
			if (turn == 2) {// 如果轮到Q进临界区
				pturn = false;// P先放弃进入临界区的意愿
				while (turn == 2) {// 等待turn等于1,也就是等待轮到自己

				}
				pturn = true;// P想进入临界区
			}
		}
		// 临界区
		turn = 2;// P离开临界区,轮到Q进入临界区了
		pturn = false;// P不想进入临界区

Q进程代码:

		qturn = true;// 表示Q想进入临界区
		while (pturn) {// 如果P也想进入临界区,进入循环
			if (turn == 1) {// 如果轮到P进临界区
				qturn = false;// Q先放弃进入临界区的意愿
				while (turn == 1) {// 等待turn等于2,也就是等待轮到自己

				}
				qturn = true;// Q想进入临界区
			}
		}
		// 临界区
		turn = 1;// Q离开临界区,轮到P进入临界区了
		qturn = false;// Q不想进入临界区


  • 9
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值