【发布时间】:2014-08-29 05:15:11
【问题描述】:
我在 The Little Book of Semaphores 中探索信号量并遇到了以下示例。 (aArrived 和 bArrived 指的是两个信号量)
线程 A
1.statement a1
2.bArrived.wait()
3.aArrived.signal()
4.statement a2
线程 B
1.statement b1
2.aArrived.wait()
3.bArrived.signal()
4.statement b2
两个线程同时执行,约束是保证a1发生在b2之前,b1发生在a2之前。
现在书中提到这是一个僵局。
我对观众的要求是解释为什么在这个解决方案中会出现死锁,因为我无法弄清楚。
另外还有两个解决方案没有导致任何死锁。如果上面的解决方案有死锁,那么下面的解决方案怎么没有死锁:
解决方案2:
线程 A
1.statement a1
2.aArrived.signal()
3.bArrived.wait()
4.statement a2
线程 B
1.statement b1
2.bArrived.signal()
3.aArrived.wait()
4.statement b2
解决方案3:
线程 A
1.statement a1
2.bArrived.wait()
3.aArrived.signal()
4.statement a2
线程 B
1.statement b1
2.bArrived.signal()
3.aArrived.wait()
4.statement b2
【问题讨论】:
标签: multithreading deadlock semaphore