阅读:3206次   评论:1条   更新时间:2011-10-30    
Peterson 算法(Dekker算法的演化)是免锁编程的基本算法之一,这个算法设计得很巧妙,核心就是三个标志位是怎样控制两个方法对临界区的访问的:

volatile int flag1 = 0; //主观因素:flag1表示方法1自身是否要求进入临界区    
volatile int flag2 = 0; //主观因素:flag2表示方法2自身是否要求进入临界区    
volatile int turn = 1; //客观因素:turn取1和2分别表示当前临界区针对方法1还是方法2开放   
  
void fun1(){    
  flag1 = 1;    
  turn = 2;    
  while( flag2==1 && turn==2 ){} //只有在方法2自身要求进入临界区且临界区针对方法2开放时,方法1才会阻塞    
  //Critical Section    
  ... //临界区内    
  flag1 = 0;    
}    
  
void fun2(){    
  flag2 = 1;    
  turn = 1;    
  while( flag1==1 && turn==1 ){} //只有在方法1自身要求进入临界区且临界区针对方法1开放时,方法1才会阻塞    
  //Critical Section    
  ... //临界区内    
  flag2 = 0;    
}   

评论 共 1 条 请登录后发表评论
1 楼 feijing 2012-03-02 09:57
这是什么东东

发表评论

您还没有登录,请您登录后再发表评论

文章信息

Global site tag (gtag.js) - Google Analytics