【发布时间】:2011-12-08 11:44:36
【问题描述】:
我一直在处理我的应用程序中的多线程,目前正在学习死锁。
我想编写一个实际导致死锁的快速应用程序,以便我可以观察效果并尝试纠正这种情况。
是否有任何情况可以保证 100% 的时间发生死锁,我可以在 C# 中进行模拟?
【问题讨论】:
标签: c# .net multithreading deadlock
我一直在处理我的应用程序中的多线程,目前正在学习死锁。
我想编写一个实际导致死锁的快速应用程序,以便我可以观察效果并尝试纠正这种情况。
是否有任何情况可以保证 100% 的时间发生死锁,我可以在 C# 中进行模拟?
【问题讨论】:
标签: c# .net multithreading deadlock
我没有针对这种特定情况的现成代码(:
但你可以用心理代码做的是:
线程 1:
拿锁 1
睡眠 30 秒
取锁 2
免费锁 2
免费锁1
线程 2:
取锁 2
睡眠 30 秒
拿锁 1
免费锁 1
免费锁2
每个线程都可以在其上运行,但如果它们或多或少同时启动,它们一起会导致死锁
【讨论】:
好吧,您可以简单地构造任何死锁情况。想象一下,线程 A 需要一个资源(比如说一个文件)来获取一些信息。线程 be 使用相同的资源来存储一些信息。 B 还需要 A 的结果来存储它。
所以,你可以使用 Timers 启动 B,让它锁定资源或其他任何东西,尝试启动 A 等待 B 并让 B 等待 A 等待 B...这就是你的死锁。
【讨论】: