使用 Object 的实例进行锁定

当使用 C#的内置 lock 语句时,需要某种类型的实例,但其状态无关紧要。object 的一个实例是完美的:

public class ThreadSafe {
  private static readonly object locker = new object();

  public void SomeThreadSafeMethod() {
    lock (locker) {
      // Only one thread can be here at a time.
    }
  }
}

NBType 的实例不应该用于此(在 typeof(ThreadSafe) 上面的代码中),因为 Type 的实例是在 AppDomains 之间共享的,因此锁的范围可以包含它不应该包含的代码(例如,如果 ThreadSafe 被加载到两个 AppDomain 中)相同的过程然后锁定其 Type 实例将相互锁定)。