c# - 锁(X)与锁(类型(X))

标签 c# multithreading locking thread-safety

锁定类的类型与锁定类本身有什么区别?

例如:

private readonly object xmpp = new object();

lock (xmpp)
{
    ...
}

对比

lock (typeof(Xmpp))
{
    ...
}

最佳答案

  • lock(x) 为该类型的每个实例在不同的锁上同步

  • lock(typeof(X)) 为该类型的所有实例在同一个锁上同步

始终锁定私有(private)锁对象:

 public class X
 {
      private readonly Object _lock = new Object();

      // ...
            lock (_lock)
            {
            }

如果您必须同步对类静态成员的访问,请使用相同的模式:

 public class X
 {
      private readonly static Object s_lock = new Object();

关于c# - 锁(X)与锁(类型(X)),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8185004/

相关文章:

c# - 如何在 C# Visual Studio 2015 中制作可移植程序?

c++ - 将结构从一个进程转移到另一个进程的最佳方法?

Android,Handler 是运行在主线程还是其他线程?

c - 生产者/消费者实现: Stuck in consumer loop

c - 多种资源的细粒度锁定算法

c# - 是否可以使用 ExpandoObject 创建动态树结构?

c# - EF 4.1 双向一对一问题

c# - 将 byte[] 转换为字符串并再次返回

java - 了解多线程等待和通知

mysql - 来自 vbscript 的表更新锁定