2012-01-18 13 views
9

Estoy intentando causar un punto muerto en C# con fines de simulación. Solo un programa rápido.Cómo causar un punto muerto

¿Alguien podría amablemente sugerir algunas ideas para hacerlo?

+0

ver este http: // stackoverflow.com/questions/2543140/deadlock- sample-in-net – GustyWind

+0

Vea el ejemplo aquí: http://stackoverflow.com/a/2411456/441574 – Brissles

Respuesta

5

Algo como esto debería funcionar:

Tema 1:

lock (A) { 

lock (B) { } 

} 

Tema 2:

lock (B) { 

lock (A) { } 

} 
+0

+1 gran ejemplo. Me he quemado los dedos con eso. –

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

créditos a: http://www.java-forums.org/java-lang/7346-how-create-simple-deadlock.html

Cuestiones relacionadas