操作系统概念 临界区问题(Peterson算法)

Peterson算法确保两个进程P0和P1互斥访问临界区。通过共享变量int turn和boolean flag[2]实现进程间协调。当一个进程企图进入临界区时,设置flag[i]为TRUE并把turn设为另一个进程的标识符j,以此让出执行权。只有当flag[j]为FALSE或者turn不等于j时,当前进程才能进入临界区。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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决定哪个进程能先进入临界区



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值