嗨,大家好我正在提高我对多线程C#的知识,并想知道如何解决这个经典的死锁问题。死锁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);
}
}
}
}
如果两个线程同时运行,则存在死锁的风险。
感谢
你解决它永远不会写任何这样的事情。如果你出于某种愚蠢的原因绝对必须这样做,并且它不能被重新设计,那么线程应该尝试外部锁,如果他们不能立即采取措施,那就去做其他事情,然后再回来尝试锁。 – 2010-06-23 06:53:37
也许这篇文章*没有更多的挂起:先进的技术,以避免和检测.NET应用程序中的死锁* [MSDN](http://download.microsoft.com/download/3/a/7/3a7fa450-1f33-41f7- 9e6d-3aa95b5a6aea/MSDNMagazineApril2006en-us.chm)可能会有所帮助。 – Oliver 2015-09-14 06:52:43