我目前正在研究互斥锁是如何工作的。我觉得我有点抓住它。我的假设低于图像是否正确?这里我们有两个进程,Pi和Pj,它们想要执行它们的关键部分,我试着解释一个互斥锁是如何工作来防止竞争条件发生的。
Pi尝试使用acquire()获取锁定。一开始,没有进程正在执行其关键部分,因此可用。在获取的while循环中,条件将为false并且不会“忙等待”并且可用将设置为false。可用设置为false的原因是为了防止其他进程进入其关键部分。另一方面,Pj不允许执行其关键部分,因为Pi将可用设置为false。 !可用将是真的,因此Pj将陷入“忙碌等待”。
一旦Pi完成执行其关键部分,它就会调用release()。 release方法重置true可用的布尔变量。一旦可用设置为true,Pj将停止“忙等待”,因为现在!availablele将给出错误值。 Pj将设置为false并执行其关键部分。循环为下一个想要获取锁定以执行其关键部分
的过程重复进行答案 0 :(得分:1)
您的解释是正确的,但不要过于担心acquire()
的实施。
首先,acquire()
的此实施在available
上有竞争条件。
此代码仅用于说明互斥锁的用法(在本例中为spinlock),并浏览实现的详细信息。
答案 1 :(得分:1)
上面实现的锁有点类似于自旋锁,除了它应该使用CAS(比较和交换)原子操作来保证正确性。实现互斥式acquire()的一般想法是: