我一直在处理我的应用程序中的多线程,目前我正在学习死锁。
我想编写一个实际导致死锁的快速应用程序,以便我可以观察到这些影响,并尝试纠正这种情况。
是否有任何情况可以保证100%的时间死锁,我可以在C#中模仿?
答案 0 :(得分:3)
我没有针对此特定情况的现成代码(:
但是,你在心理代码中可以做的是:
主题1:
拿锁1
睡30秒
拿锁2
自由锁2
免费锁1
主题2:
拿锁2
睡30秒
拿锁1
自由锁1
免费锁定2
每个线程都可以在它上面运行,但是它们会一起导致死锁,它们会同时或多或少地启动
答案 1 :(得分:-1)
好吧,你可以简单地构建任何死锁情境。想象一下,线程A需要一个资源(比方说一个文件)来获取一些信息。线程使用相同的资源来存储一些信息。 B还需要A的结果来存储它。
所以,使用Timers你可以启动B,让它锁定资源或其他什么,尝试启动A等待B并让B等待A等待B ......这就是你的死锁。