使用 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
实例将相互锁定)。