锁(X)vs锁(typeof(X))

时间:2011-11-18 15:46:03

标签: c# multithreading locking thread-safety

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

例如:

private readonly object xmpp = new object();

lock (xmpp)
{
    ...
}

VS

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

1 个答案:

答案 0 :(得分:19)

  • lock(x)针对该类型的每个实例在不同的锁上进行同步

  • lock(typeof(X))同步锁定所有类型的实例

始终锁定私人锁定对象:

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

      // ...
            lock (_lock)
            {
            }

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

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