Peterson's Algorithm

给在考研的学弟学妹们加油了;

关于peterson算法的一些思考,为了方便记忆,写成博客;

//操作系统 临界区互斥Peterson's Algorithm算法思考

Pi:
flag[i] = ture; turn = j;
while (flag[j] && turn == j);
critical section;
flag[i] = false;
remainder section;

Pj:
flag[j] = true; turn = i;
while (flag[i] && turn == i);
critical sectionl
flag[j] = false;
remainder section;

这里实现进程互斥,首先设置flag布尔数组用来判断进程是否想要进入临界区,若flag[i]==ture则Pi进程想要进入临界区;

设置turn变量的用途是用来实现对想要进入临界区的进程的一个排序;

若Pi和Pj都想进入临界区,i先提出申请,j后提出申请,进入while循环判定时turn==i(Pi执行turn=j在前,Pj执行turn=i在后,所以while循环中的turn==i);先提出申请的进程先进入临界区;Pi走到while循环,此时flag[j]==true,turn==i,不满足循环条件,跳出(若是Pj不想进入临界区压根就没有提出申请,那么flag[j]==false,更不满足循环条件),Pi就可以继续进入critical section;Pj走到while循环,但是因为此时flag[i]==ture且turn==i,Pj陷入while循环中无法进入critical section,Pj需要一直等到Pi退出临界区时置flag[i]==false才能跳出循环,进入临界区;

所以设置两个变量一个规则,flag数组为了判定是否有其他进程想要进入临界区(避免如果没有其他进程想要进入,当前进程一直空等),turn变量为想要进入临界区的进程进行排序(turn==i则Pj在前,turn==j则Pi在前),先提出申请的进程优先进入临界区,其他进程等待,就这样实现了对临界区访问的互斥。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值