使用 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 例項將相互鎖定)。