2012-01-18 3 views
9

私はシミュレーションのためにC#でデッドロックを起こそうとしています。ちょうど簡単なプログラム。デッドロックを成功させるには

誰でも親切にそうすることを提案できますか?

+0

このHTTPを参照してくださいstackoverflow.com/questions/2543140/deadlock-サンプルインネット – GustyWind

+0

ここの例を見てください:http://stackoverflow.com/a/2411456/441574 – Brissles

答えて

5

このような何かが動作するはずです:

スレッド1:

lock (A) { 

lock (B) { } 

} 

はスレッド2:

lock (B) { 

lock (A) { } 

} 
+0

+1素晴らしい例。私は指でそれを焼いた。 –

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

関連する問題