我正在编写一个死锁检测算法的测试用例。我们想要检测潜在的死锁情况。目前,我们正在检查无序获取的锁。
对此进行简单的双向测试如下:
我们正确地将此视为死锁。但是稍微延迟thread2,它不会死锁,但我们正确地将其检测为 potential 死锁:
我们将此检测为潜在的死锁,因为Thread1以与Thread2不同的顺序获取了这些锁。因此,如果时机恰到好处,则可能出现死锁。
我正在编写涉及三个或更多线程的死锁的测试用例。我可以很容易地强迫这样的三方僵局:
同样,我们可以正确地将其视为死锁。
但是,如何将此测试用例从保证死锁更改为潜在的死锁?我如何改变时间以继续正常执行?
答案 0 :(得分:2)
使用不同的锁定顺序发生死锁时提供示例的最简单方法是及时分离所有线程的执行。你为两个线程的情况做了这样的事情:第一个线程获取并释放所有锁,然后才开始第二个线程。对于三线程情况是相同的:你可以完全运行第一个线程,然后第二个,然后第三个。
更复杂的情景也是可能的:
但是如果你想要演示,最简单的连续线程执行是最容易理解的。