Peterson算法适用于两个进程在临界区与剩余空间交替执行,两个进程为P0和P1,为了方便,当使用Pi时,用Pj来表示另外一个进程,即j ==1-i。
Peterson算法需要在两个进程共享两个数据项:
int turn;
boolean flag[2];
变量turn==i,则Pi允许在临界区执行,flag表示哪个进程想进入其临界区,如flag[i]==true,即Pi想进入临界区,算法表示如下:
do{
flag[i] = TRUE;
turn = j;
while(flag[j]&&turn == j);
临界区
flag[i]=FALSE;
剩余区
}while(TRUE);
为了进入临界区Pi设置flag[i]为TRUE,turn的值为j,从而表示如果Pj想进入临界区,那么Pj能进入。如果两个试图同时进入,那么turn几乎同时设置成i和j,最终turn决定哪个进程能先进入临界区