任何人都可以用 c# 给出一个简单的死锁示例代码吗?并请告诉您在 C# 代码示例中查找死锁的最简单方法。 (可能是检测给定示例代码中死锁的工具。)
注意:我有 VS 2008
最佳答案
一种常见的方法是,如果您有嵌套的锁,这些锁不是以相同的顺序获取的。线程 1 可以获得锁 A,线程 2 可以获得锁 B,它们会死锁。
var a = new object();
var b = new object();
lock(a) {
lock(b) {
}
}
// other thread
lock (b) {
lock(a) {
}
}
编辑:非锁定示例 .. 使用等待句柄。假设苏格拉底和笛卡尔正在吃牛排,他们都是彬彬有礼的哲学家,需要一把 fork 和一把刀才能吃饭。然而,他们只有一套银器,所以每个人都可以拿一个餐具,然后永远等待另一个人交出他们的餐具。
参见 Dining Philosopher's Problem
WaitHandle fork = new AutoResetEvent(), knife = new AutoResetEvent();
while(Socrates.IsHungry) {
fork.WaitOne();
knife.WaitOne();
Eat();
fork.Set();
knife.Set();
}
// other thread
while(Descartes.IsHungry) {
knife.WaitOne();
fork.WaitOne();
Eat();
knife.Set();
fork.Set();
}
关于c# - .net 中的死锁示例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2543140/