Peterson's solution for achieving mutual exclusion

#define FALSE 0
#define TRUE  1
#define N     2                      /* number of processes */

int turn;                            /* whose turn is it? */
int interested[N];                   /* all values initially 0 (FALSE)*/
void enter_region(int process)       /* process is 0 or 1 */
{
     int other;                      /* number of the other process */
     other = 1 - process;            /* the opposite of process */
     interested[process] = TRUE;     /* show that you are interested */
     turn = process;                 /* set flag */
     while (turn == process && interested[other] == TRUE) /* null statement */;
}
void leave_region(int process)       /* process: who is leaving */
{
     interested[process] = FALSE;    /* indicate departure from critical region */
}
Let us see how this solution works. 
Initially, neither process is in its critical region. Now process 0 calls enter_region. It indicates its interest by setting its array element and sets turn to 0. 
Since process 1 is not interested, enter_region returns immediately. If process 1 now calls enter_region, it will hang there until interested[0] goes to FALSE, 
an event that only happens when process 0 calls leave_region to exit the critical region.

 

Now consider the case that both processes call enter_region almost simultaneously.

Both will store their process number in turn. Whichever store is done last is the one that counts;

the first one is lost. Suppose that process 1 stores last, so turn is 1.

When both processes come to the while statement, process 0 executes it zero times and enters its critical region.

Process 1 loops and does not enter its critical region

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值