我一直在阅读“信号量小书”,在第 41 页有一个解决可重用障碍问题的方法。我遇到的问题是为什么它不会产生死锁情况。
1 # rendezvous
2
3 mutex.wait()
4 count += 1
5 if count == n:
6 turnstile2.wait() # lock the second
7 turnstile.signal() # unlock the first
8 mutex.signal()
9
10 turnstile.wait() # first turnstile
11 turnstile.signal()
12
13 # critical point
14
15 mutex.wait()
16 count -= 1
17 if count == 0:
18 turnstile.wait() # lock the first
19 turnstile2.signal() # unlock the second
20 mutex.signal()
21
22 turnstile2.wait() # second turnstile
23 turnstile2.signal()
在这个解决方案中,在第 15 行和第 20 行之间,在持有会导致死锁的互斥体时在信号量(第 18 行)上调用 wait() 不是一个坏习惯吗?请解释。谢谢你。