【发布时间】:2026-02-01 20:00:01
【问题描述】:
我目前正在研究互斥锁的工作原理。我想我有点掌握它。我在图片下方的假设是否正确?这里我们有两个进程 Pi 和 Pj 想要执行它们的临界区,我试图解释互斥锁如何工作以防止发生竞争条件。
Pi 尝试使用 acquire() 获取锁。一开始,没有进程正在执行其临界区,因此可用将是真的。在 acquire 的 while 循环中,条件为 false,不会“忙等待”,available 将设置为 false。将available设置为false的原因是为了防止其他进程进入它们的临界区。另一方面,Pj 不允许执行其临界区,因为可用被 Pi 设置为 false。 !available 为真,因此 Pj 将陷入“忙等待”。
一旦 Pi 完成其临界区的执行,它就会调用 release()。 release 方法将可用的布尔变量重置为 true。一旦available 设置为true,Pj 将停止“忙等待”,因为现在!availale 将给出一个false 值。 Pj 将设置为 false 并执行其临界区。该循环会重复自己,以便下一个想要获取锁以执行其临界区的进程
【问题讨论】:
标签: mutex