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