2012-01-18 71 views
9

我想在C#中导致死锁,以用于模拟目的。只是一个快速程序。如何成功导致死锁

任何人都可以提出一些建议吗?

+0

参阅此http:// stackoverflow.com/questions/2543140/deadlock-网上样本 – GustyWind 2012-01-18 11:18:19

+0

请参阅此处的示例:http://stackoverflow.com/a/2411456/441574 – Brissles 2012-01-18 11:18:08

回答

5

像这样的东西应该工作:

主题1:

lock (A) { 

lock (B) { } 

} 

线程2:

lock (B) { 

lock (A) { } 

} 
+0

+1个很好的示例。我用手指烧了它。 – 2012-07-03 01:56:30

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"); 
      } 
     } 
    } 
} 

学分:http://www.java-forums.org/java-lang/7346-how-create-simple-deadlock.html