2012-01-18 35 views
9

Tôi đang cố gắng gây ra bế tắc trong C# cho mục đích mô phỏng. Chỉ là một chương trình nhanh.Làm thế nào để thành công gây ra bế tắc

Có ai vui lòng đề xuất một số ý tưởng để làm như vậy không?

+0

thấy http: // stackoverflow.com/questions/2543140/deadlock- mẫu-trong-net – GustyWind

+0

Xem ví dụ tại đây: http://stackoverflow.com/a/2411456/441574 – Brissles

Trả lời

5

Something như thế này nên làm việc:

Chủ đề 1:

lock (A) { 

lock (B) { } 

} 

Chủ đề 2:

lock (B) { 

lock (A) { } 

} 
+0

+1 ví dụ tuyệt vời. Tôi đã đốt ngón tay của tôi với nó. –

3
class Program 
{ 
    static object _locker1 = new object(); 
    static object _locker2 = new object(); 

    static void Main(string[] args) 
    { 
     Thread first = new Thread(FirstThread); 
     first.Start(); 

     Thread second = new Thread(SecondThread); 
     second.Start(); 

    } 

    static void FirstThread(object obj) 
    { 
     // Lock resource 1 
     lock(_locker1) 
     { 
      Console.WriteLine("Thread 1: locked resource 1"); 

      try 
      { 
       Thread.Sleep(50); 
      } 
      catch (ThreadInterruptedException e) {} 

      lock(_locker2) 
      { 
       Console.WriteLine("Thread 1: locked resource 2"); 
      } 
     } 
    } 

    static void SecondThread(object obj) 
    { 
     // Lock resource 1 
     lock (_locker2) 
     { 
      Console.WriteLine("Thread 2: locked resource 2"); 

      try 
      { 
       Thread.Sleep(50); 
      } 
      catch (ThreadInterruptedException e) { } 

      lock (_locker1) 
      { 
       Console.WriteLine("Thread 2: locked resource 1"); 
      } 
     } 
    } 
} 

tín dụng cho: http://www.java-forums.org/java-lang/7346-how-create-simple-deadlock.html

Các vấn đề liên quan