用于演示死锁的 C# 应用程序

本文关键字:应用程序 死锁 用于 | 更新日期: 2023-09-27 18:17:26

可能的重复项:
C# 中的简单死锁示例

我一直在处理应用程序中的多线程,目前正在了解死锁。

我想编写一个实际上会导致死锁的快速应用程序,以便我可以观察效果,并尝试纠正这种情况。

是否有任何情况可以保证 100% 的死锁,我可以在 C# 中模拟?

用于演示死锁的 C# 应用程序

我没有针对这种特定情况的现成代码(:

但是,在心理代码中,你可以做的是:

线程 1:
拿锁 1
睡眠 30 秒
锁定 2
自由锁 2
自由锁 1

线程 2:
锁定 2
睡眠 30 秒
拿锁 1
自由锁 1
自由锁 2

每个线程都可以在其上运行,但是它们一起会导致死锁,因为它们或多或少同时启动

好吧,您可以简单地构造任何死锁位置。想象一下,线程 A 需要一个资源(比如一个文件(来获取一些信息。线程 be 使用相同的资源来存储一些信息。B 还需要来自 A 的结果来存储它。

因此,使用计时器,您可以启动 B,让它锁定资源或其他任何东西,尝试启动等待 B 的 A 并让 B 等待等待 B 的 A......这就是你的僵局。