阅读: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 楼 feijing 2012-03-02 09:57