进程互斥的软件方法

通过平等协商方式实现进程互斥的最初办法是软件办法。其基本思路是在进入区检查和设置一些标志,如果已经有进程在临界区,则在进入区通过循环检查进行等待;在退出区修改标志。其中的主要问题是设置什么标志和如何检查标志。下面讨论几种软件方法实现软件互斥算法。

算法1 :单标志算法

while(turn!= i);
临界区
turn = j;
剩余区

算法1可以保证任何时刻最多只有一个进程在临界区。但他的缺点是强制轮流进入临界区,没有考虑进程的实际需求。这种算法容易造成资源的利用不充分。

算法2 :双标志、先检查算法

为了克服算法1的缺点,可考虑修改临界区标志的设置

while( flag [j]);
flag[i] = TRUE;
临界区
flag[i] = FLASE;
剩余区

算法2的优点是克服了算法1的缺点,两个进程不用交替进入,可连续使用。但由于使用多个标志,算法又产生了新问题,即进程Pi和Pj可能同时进入临界区,从而违反了最多只有一个进程在临界区的要求。

算法3 :双标志、后检查算法

为了解决算法2的新问题,有两种选择:一是保证检查和修改操作间不出现间隔,一是修改表标志含义。第一种使用软件无法做到。采用第二种方法

flag[i] = TRUE;
while(flag[j]);
临界区
flag[i] = FALSE;
剩余区

算法3可防止两个进程同时进入临界区,但它的缺点是Pi和Pj可能都进不了临界区。

算法4 :先修改、后检查、后修改者等待算法

算法4的基本思想是结合算法1和算法3。

flag[i] = TRUE;turn =j;
while(flag[j]&&turn =j);
flag[i] = FALSE;

算法4可完全正常工作,即实现同步机制要求的四条准则中的前两条:空闲则入、忙则等待。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cat_milk

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值