互斥的软件实现:Peterson算法和Dekker算法
2016-01-23 22:01
288 查看
Peterson算法:是一个实现互斥锁的并发程序设计算法,可以控制两个线程访问一个共享的单用户资源而不发生访问冲突。
算法代码及注释如下:
Peterson算法满足互斥、空闲让进。有限等待3条同步机制准则。
Dekker互斥算法:解决并发进程互斥与同步的软件实现方法。
算法代码及注释如下:
Peterson算法比Dekker算法更简单一些。
算法代码及注释如下:
bool flag[2]; //表示临界区状态及哪个进程正在占用临界区 int turn; //表示能进入临界区的进程序号 void P0() { while (1) { flag[0] = true; //P0请求资源 turn = 1; //赋予P0访问权限 while (flag[1] && turn == 1); //等待进程P1释放资源及权限 //请求成功,使用资源 /* 临界区代码段 */ flag[0] = false; //释放请求 } } void P1() //原理及注释同P0 { while (1) { flag[1] = true; turn = 0; while (flag[0] && turn == 0); //请求成功,使用资源 /* 临界区代码段 */ flag[1] = false; } }
Peterson算法满足互斥、空闲让进。有限等待3条同步机制准则。
Dekker互斥算法:解决并发进程互斥与同步的软件实现方法。
算法代码及注释如下:
bool flag[2];//表示临界区状态及哪个进程想要占用临界区 int turn; //表示能进入临界区的进程序号 void P0() { while (1) { flag[0] = true; //P0请求使用资源 while (flag[1]) //查询P1是否在使用资源 { if (turn == 1) //查询P1是否具有权限进入临界区 { flag[0] = false; //如果P1有权限则P0取消请求 while (turn == 1); //等待P1释放资源 flag[0] = true; //继续请求 } //请求成功,使用资源 /* 临界区代码段 */ turn = 1; //使用完成后把权限赋给P1 flag[0] = false; } } } void P1() //原理及注释同P0 { { while (1) { flag[1] = true; while (flag[0]) { if (turn == 0) { flag[1] = false; while (turn == 0); flag[1] = true; } //请求成功,使用资源 /* 临界区代码段 */ turn = 0; flag[1] = false; } } }
Peterson算法比Dekker算法更简单一些。
相关文章推荐
- 应用领航:盘点那些年我们一起追过的OS
- 无奇不有!盘点各国自己开发的操作系统
- 书评:《算法之美( Algorithms to Live By )》
- 动易2006序列号破解算法公布
- Ruby实现的矩阵连乘算法
- C#插入法排序算法实例分析
- 可自定义oem的萝卜家园 Ghost XP 新春装机版 V200801 下载
- 超大数据量存储常用数据库分表分库算法总结
- C#数据结构与算法揭秘二
- C#冒泡法排序算法实例分析
- 算法练习之从String.indexOf的模拟实现开始
- C#算法之关于大牛生小牛的问题
- C#实现判断操作系统是否为Win8以上版本
- C#实现的算24点游戏算法实例分析
- c语言实现的带通配符匹配算法
- 浅析STL中的常用算法
- 算法之排列算法与组合算法详解
- C++实现一维向量旋转算法
- Ruby实现的合并排序算法
- C#折半插入排序算法实现方法