有人可以舉一個例子說明如何在C#語言中導致線程死鎖嗎?C#中的線程死鎖例子#
17
A
回答
32
static object object1 = new object();
static object object2 = new object();
public static void ObliviousFunction()
{
lock (object1)
{
Thread.Sleep(1000); // Wait for the blind to lead
lock (object2)
{
}
}
}
public static void BlindFunction()
{
lock (object2)
{
Thread.Sleep(1000); // Wait for oblivion
lock (object1)
{
}
}
}
static void Main()
{
Thread thread1 = new Thread((ThreadStart)ObliviousFunction);
Thread therad2 = new Thread((ThreadStart)BlindFunction);
thread1.Start();
thread2.Start();
while (true)
{
// Stare at the two threads in deadlock.
}
}
+0
+1,我來到這個問題來描述這樣的事情。在實踐中鎖定購買順序是一個非常普遍的問題。經驗法則:如果您需要同時持有2個鎖,則應該以可預測的和一致的順序獲取並釋放它們。 – asveikau 2010-03-09 18:40:50
6
在天平的另一端, 單獨的同步的上下文 邀請死鎖。這裏有一個例子:
[Synchronization]
public class Deadlock : ContextBoundObject {
public DeadLock Other;
public void Demo() { Thread.Sleep (1000); Other.Hello(); }
void Hello() { Console.WriteLine ("hello"); }
}
public class Test {
static void Main() {
Deadlock dead1 = new Deadlock();
Deadlock dead2 = new Deadlock();
dead1.Other = dead2;
dead2.Other = dead1;
new Thread (dead1.Demo).Start();
dead2.Demo();
}
由於死鎖的每個實例中測試創建 - 一個 非同步類 - 每個實例 意志都有自己的同步 背景下,因此,自己的鎖。當 兩個對象呼籲對方, 它並不需要很長時間的僵局 發生(一秒,要準確!) 如果僵局,測試 類被寫入的問題會特別 陰險不同的編程團隊 。它可能是 不合理,期望那些負責測試類的 甚至知道他們的越界,讓 知道如何去解決 它。這與明確的 鎖相反,其中死鎖通常是 更明顯。
相關問題
- 1. C#線程死鎖
- 2. C++線程死鎖
- 3. 如何修復一個C++線程死鎖的例子
- 4. 多線程中的死鎖
- 5. 在C#中處理線程(死鎖)
- 6. Ruby線程死鎖
- 7. Python線程死鎖
- 8. Delphi線程死鎖
- 9. Java,線程死鎖?
- 10. 多線程死鎖
- 11. Java線程死鎖
- 12. 死鎖的線程java
- 13. 在Java中死鎖(用一個例子)
- 14. Python的子流程-POPEN死鎖在多線程環境中
- 15. 在C自制線程池的多線程死鎖#
- 16. C多線程死鎖的線程事件
- 17. 產卵線程時死鎖?
- 18. c3po助手線程死鎖
- 19. MemoryStream.CopyTo()導致線程死鎖
- 20. 死鎖在Python線程
- 21. 線程死鎖異步
- 22. 多線程和死鎖
- 23. 線程池死鎖與Task.Result
- 24. 死鎖線程檢查
- 25. 線程中的死鎖情況?
- 26. XMPP中的Ruby線程死鎖(xmpp4r)
- 27. Java中的多線程死鎖
- 28. GTK中線程的死鎖問題
- 29. Java中的多線程死鎖
- 30. .net中的死鎖示例?
這功課嗎? – 2010-03-09 18:18:31
他沒有把它標記爲家庭作業。 – zgnilec 2013-04-08 01:59:27