今天被提问,如何写死锁。
场面一度极其尴尬,因为我发现我竟然写不出来….
这已经是第二次发生了….
每次我都是上网看一下,觉得好简单,应该60秒就搞定,然后每次都卡壳…

好吧,仔细研究了一番的我,只好真真正正在60秒内写一次死锁了。
ps: 死锁只在多线程中发生。

using System.Collections;
using System.Collections.Generic;
using System;
using System.Threading.Tasks;
using System.Threading ;

public static class Item{
  public static object obj1 = new object();
  public static object obj2 = new object();

}
public class A {

  void fooFirst(){
    Console.WriteLine($"start foo first");
    lock(Item.obj2){
      Console.WriteLine($"obj2 lock");
      Thread.Sleep(100);
      lock(Item.obj1){
        Console.WriteLine($"obj1 lock");
      }
    }
  }

  void fooSecond(){
    Console.WriteLine($"start foo second");
    lock(Item.obj1){
      Console.WriteLine($"obj1 lock");
      Thread.Sleep(100);
      lock(Item.obj2){
        Console.WriteLine($"obj2 lock");
      }
    }
  }


  static void Main(){
    A a = new A();
    var t1 = Task.Run(a.fooFirst);
    var t2 = Task.Run(a.fooSecond);

    t1.Wait();
    t2.Wait();
  }
}


creativ common license