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
[……]阅读全文