嗨,大家好我正在提高我對多線程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