【发布时间】:2010-06-23 06:48:07
【问题描述】:
大家好,我正在提高对多线程 C# 的了解,并且想知道如何解决这个经典的死锁问题。
public class SomeClass
{
private object _lock1 = new object();
private object _lock2 = new object();
public void Method1()
{
lock (_lock1)
{
Thread.Sleep(10000);
lock (_lock2)
{
Thread.Sleep(10000);
}
}
}
public void Method2()
{
lock (_lock2)
{
Thread.Sleep(10000);
lock (_lock1)
{
Thread.Sleep(10000);
}
}
}
}
如果两个线程同时运行,则存在死锁的风险。
谢谢
【问题讨论】:
-
你可以通过从不写任何这样的东西来解决它。如果您有某些情况由于某些愚蠢的原因而绝对必须这样做并且无法重新设计,那么线程应该尝试外部锁,如果它们不能立即获取它,请去做其他事情并返回并再次尝试锁。
-
也许MSDN 上的文章No More Hangs: Advanced Techniques To Avoid and Detect Deadlocks In .NET Apps 可能会有所帮助。
标签: c# multithreading locking