class Program
{
static void Main(string[] args)
{
Thread thread1 = new Thread((ThreadStart)DLockSample.FunctionA);
Thread therad2 = new Thread((ThreadStart)DLockSample.FunctionB);
thread1.Start();
therad2.Start();
}
}
public class DLockSample
{
static object object1 = new object();
static object object2 = new object();
public static void FunctionA()
{
lock (object1)
{
Thread.Sleep(1000);
lock (object2)
{
Thread.Sleep(1000);
Console.WriteLine("heart beat - object2");
}
}
}
public static void FunctionB()
{
lock (object2)
{
lock (object1)
{
Thread.Sleep(1000);
Console.WriteLine("heart beat - object1");
}
}
} }
-1
A
回答
1
總是在所有線程中以相同的順序輸入鎖。也參見hierarchy of critical sections即, FunctionB需要是:
public static void FunctionB()
{
lock (object1)
{
lock (object2)
...
+0
是的,現貨... – 2011-02-02 12:22:31
+0
我同意。但是代碼塊有意模擬場景,我們應該能夠提出一些合適的解決方案。 – sawer 2011-02-02 12:23:47
1
這是一個很好的解決問題的方法。只是一些使用技巧:
- 總是以相同的順序
- 如果它是不可能以相同的順序鎖定,使用對象的字段保存順序(例如,如果A.Id> B.上的對象鎖定Id然後在B之前始終鎖定A)。
相關問題
- 1. 我該如何解決這個明顯的EhCache死鎖?
- 2. 我該如何解決這個問題?
- 3. 我該如何解決這個問題?
- 4. 我該如何解決這個問題?
- 5. 我該如何解決這個問題?
- 6. 我該如何解決這個問題?
- 7. 我該如何解決這個問題?
- 8. 我該如何解決這個問題?
- 9. 我該如何解決這個問題?
- 10. 我該如何解決這個問題
- 11. 我該如何解決這個問題?
- 12. 我該如何解決這個問題?
- 13. 我該如何解決這個問題?
- 14. 我該如何解決這個問題?
- 15. F#解決死鎖問題
- 16. 如何解決這個死鎖?
- 17. 明顯死鎖c3p0問題
- 18. 問題與編碼,我該如何解決這個問題?
- 19. 如何重構這個死鎖問題?
- 20. 跳過我的代碼,我該如何解決這個問題?
- 21. 這是什麼錯誤?我該如何解決這個問題?
- 22. 我該如何解決這個問題?我在程序
- 23. 我該如何解決這個觸摸事件/繪製循環「死鎖」?
- 24. 解決核心數據死鎖問題?
- 25. 錯誤:不是一個聲明,我該如何解決這個問題?
- 26. 我該如何使用mysql查詢來解決這個問題?
- 27. 我如何解決這個plist問題?
- 28. 我該如何解決這個簡單的C溢出問題?
- 29. 我應該如何解決這個問題? $ _GET中的符號
- 30. 我該如何解決這個問題htaccess的
這顯然是故意的。這不是很有趣,只需交換FunctionB中的鎖。如果您想要教育答案,請務必使用[作業]標籤。 – 2011-02-02 13:06:54