进程互斥(二)Dekker算法
来源:互联网 发布:mac系统怎么看bilibili 编辑:程序博客网 时间:2024/05/17 01:44
假设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不想进入临界区
0 0
- 进程互斥(二)Dekker算法
- 多线程互斥之Dekker算法
- 解决临界区(互斥)的软件方法-Dekker算法和Peterson算法
- 互斥的软件实现:Peterson算法和Dekker算法
- 操作系统原理——Dekker互斥算法详解
- 操作系统原理——Dekker互斥算法详解
- Dekker 算法
- Dekker算法
- 进程互斥(三)Peterson算法
- 进程死锁算法——Peterson与Dekker
- Dekker算法详解:
- Peterson算法-软件实现进程(线程互斥)
- 线程互斥(二)
- 进程(线程)间同步互斥经典问题(二)哲学家问题
- 进程同步与互斥之经典问题二
- Dekker's算法和Peterson算法
- 进程(线程)互斥的软件实现--皮特森(Peterson)算法
- 进程互斥(一)相关概念
- 文章标题
- [STL]C++中placement new操作符(经典)
- 剑指Offer--面试题29:数组中出现超过一半的数字
- gcc vim c操作命令
- 玩转oracle学习第六天
- 进程互斥(二)Dekker算法
- 《Java程序设计》第16周周五:数据库连接与随机数的使用
- Java CountDownLatch Example(转)
- 无IDE时编译和运行Java
- [leetcode] Jump Game
- 玩转oracle学习第七天
- gradle运行java main
- 剑指offer 面试题10
- 语音通话-sip电话(一)