进程互斥的软件实现方法

文章讨论了不同进程互斥访问临界区的算法,包括单标志法、双标志先检查法和后检查法,以及Peterson算法。这些算法分别面临“空闲让进”、“忙则等待”和“有限等待”等原则的问题。Peterson算法虽优化了之前的方案,但仍未能解决所有问题。
摘要由CSDN通过智能技术生成

本节算法非常巧妙,现在依然有很多框架底层有借鉴这种算法的思想!

单标志法

算法思想:两个进程在访问完临界区后会把使用临界区的权限转交给另一个进程。也就是说每个进程 进入临界区的权限只能被另一个进程赋予

turn 的初值为 0,即刚开始只允许 0 号进程进入临界区。 若 P1 先上处理机运行,则会一直卡在 ⑤。直到 P1 的时间片用完,发生调度,切换 P0 上处理机运行。 代码 ① 不会卡住 P0,P0 可以正常访问临界区,在 P0 访问临界区期间即时切换回 P1,P1依然会卡在 ⑤。 只有 P0 在退出区将 turn 改为 1 后,P1才能进入临界区。

因此,该算法可以实现“同一时刻最多只允许一个进程访问临界区

只能按 P0 ->P1 -> P0 -> P1 ->……这样轮流访问。这种必须“轮流访问”带来的问题是,如果此时允许进 入临界区的进程是 P0,而 P0 一直不访问临界区,那么虽然此时临界区空闲,但是并不允许 P1 访问。

因此,单标志法存在的主要问题是:违背“空闲让进”原则

双标志先检查法

算法思想:双标志先检查法的改版。前一个算法的问题是先“检查”后“上锁”,但是这两个操作又 无法一气呵成,因此导致了两个进程同时进入临界区的问题。因此,人们又想到先“上锁”后“检查” 的方法,来避免上述问题。

若按照 ①⑤②⑥③⑦….的顺序执行,P0 和 P1 将会同时访问临界区。

因此,双标志先检查法的主要问题是:违反“忙则等待”原则。

原因在于,进入区的“检查”和“上锁” 两个处理不是一气呵成的。“检查”后,“上锁”前可能发 生进程切换。

双标志后检查法

算法思想:双标志先检查法的改版。前一个算法的问题是先“检查”后“上锁”,但是这两个操作又 无法一气呵成,因此导致了两个进程同时进入临界区的问题。因此,人们又想到先“上锁”后“检查” 的方法,来避免上述问题。

若按照 ①⑤②⑥….的顺序执行,P0 和 P1 将都无法进入临界区

因此,双标志后检查法虽然解决了“忙则等待”的问题但是又违背了“空闲让进”和“有限等待” 原则,会因各进程都长期无法访问临界资源而产生“饥饿”现象。

两个进程都争着想进入临界区,但是谁也不让谁,最后谁都无法进入临界区 。

Peterson算法

算法思想:结合双标志法、单标志法的思想。如果双方都争着想进入临界区,那可以让进程尝试“孔 融让梨”(谦让)。做一个有礼貌的进程。

Peterson 算法用软件方法解决了进 程互斥问题,遵循了空闲让进、忙则等待、有限等待 三个原则,但是依然未遵循让权等待的原则。

Peterson 算法相较于之前三种软件 解决方案来说,是最好的,但依然不够好。

小结

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Mr.huang

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

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

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

打赏作者

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

抵扣说明:

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

余额充值