Peterson互斥算法与多处理器系统

Peterson互斥算法

1981年,G.L.Peterson 提出的一个简单的互斥算法。

int flag[2];//初值为0,表示进程是否在临界区内
int turn;//初值为0或1,表示当前轮流次序
P0:
	do
	{
		flag[0]=1;
		turn=1;
		while (flag[1]&&turn==1);
		//临界区
		flag[0]=0;
		//其余代码
	
	}while(1)

P1:
	do
	{
		flag[1]=1;
		turn=0;
		while (flag[0]&&turn==0);
		//临界区
		flag[1]=0;
		//其余代码
	
	}while(1)

多处理器系统与Peterson

Peterson算法适合单处理器系统,对于多处理器系统并不适用,因为一个进程内部顺序执行的指令,可能由于满足Bernstein条件而被并行执行,并行执行的效果可能是重排序执行的结果,比如Peterson算法中,进程 P 0 P_0 P0进入临界区之前的两条指令flag[0]=1; turn=1;重排序后可能顺序变为 turn=1; flag[0]=1;,此时将不再满足互斥性,即进程 P 0 P_0 P0和进程 P 1 P_1 P1可能同时进入临界区,原因如下。
P 0 P_0 P0进程执行turn=1后时间片用尽,若此时 P 1 P_1 P1获得处理器,将直接进入临界区,若 P 1 P_1 P1进程在临界区中时间片用尽, P 0 P_0 P0进程又重新获得处理器,则 P 0 P_0 P0进程也将进入临界区。此时不能满足互斥性。

参考文献

[1]计算机操作系统教程,第4版,左万利,王英,高等教育出版社,2019年6月

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值