进程互斥 Peterson算法

本文详细介绍了Peterson算法,一种用于解决两个进程互斥访问临界区的经典算法。通过两个全局变量和一组特定的方法,确保了在多进程环境中资源的安全访问。

转自http://blog.youkuaiyun.com/l294265421/article/details/46674847

假设有两个进程需要互斥的访问某一个临界区。

 

Peterson算法的形式如下:

enterRegion(process);
// process表示进程号 // 临界区 leaveRegion(process);

具体实现如下(Java实现):

有两个全局变量:

 

// 用于表示轮到哪个进程  
private int turn;  
// 用于表示进程进入临界区的意愿,下标对应进程号  
private boolean[] interested = new boolean[] {false, false};  

 

enterRegion方法实现如下:

  /** 
* @param process 进程号 
*/  
ublic void enterRegion(int process) {  
// 另一个进程的进程号  
int other = 1 - process;  
  
// 进程process想进入临界区  
interested[process] = true;  
  
// 设置轮到自己进入临界区了  
turn = process;  
  
/** 
 * 当两个进程同时想进入临界区时,它们的interested[process]都 
 * 为true,但后一个进程设置的turn值会覆盖前一个进程设置的turn值, 
 * 这样后一个进程的turn == process条件为真,它会在该while循环 
 * 中持续等待,而前一个进程的turn == process条件为假,能顺利进入 
 * 临界区;等前一个进程离开临界区后,后一个进程也能进入临界区 
 */  
while (turn == process && interested[other] == true) {  
      
}  

leaveRegion方法实现如下:

public void leaveRegion(int process) {  
    interested[process] = false;  
}  

 

转载于:https://www.cnblogs.com/xym4869/p/8476100.html

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值