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. 我該如何解決這個問題?
- 2. 我該如何解決這個問題?
- 3. 我該如何解決這個問題?
- 4. 我該如何解決這個問題?
- 5. 我該如何解決這個問題
- 6. 我該如何解決這個問題?
- 7. 我該如何解決這個問題?
- 8. 我該如何解決這個問題?
- 9. 我該如何解決這個問題?
- 10. 問題與編碼,我該如何解決這個問題?
- 11. 如何重構這個死鎖問題?
- 12. 跳過我的代碼,我該如何解決這個問題?
- 13. 我該如何解決這個問題?我在程序
- 14. 我該如何解決這個觸摸事件/繪製循環「死鎖」?
- 15. 解決死鎖
- 16. 我該如何解決這個常見的SQL問題
- 17. 我應該如何解決這個問題? $ _GET中的符號
- 18. 我該如何解決這個linq查詢的性能問題?
- 19. 我該如何解決這個簡單的C溢出問題?
- 20. 我該如何解決這個惱人的WiX問題?
- 21. 我該如何解決這個問題htaccess的
- 22. 我該如何解決這個內存泄漏問題? NSInvocation的
- 23. DLL依賴於curllib.dll - 我該如何解決這個問題?
- 24. 我該如何解決這個CSS異常問題?
- 25. 「EXC_BAD_ACCESS」我該如何解決這個問題?
- 26. 我該如何解決這個node.js路徑問題?
- 27. Mongo沒有max()函數,我該如何解決這個問題?
- 28. XBAP,System.Security.SecurityException,我該如何解決這個問題?
- 29. 我該如何解決這個問題:「超出系統資源」?
- 30. JUnit錯誤我該如何解決這個問題?
這顯然是故意的。這不是很有趣,只需交換FunctionB中的鎖。如果您想要教育答案,請務必使用[作業]標籤。 – 2011-02-02 13:06:54