блокировка (X) против блокировки (typeof (X)) - PullRequest
17 голосов
/ 18 ноября 2011

В чем разница между блокировкой для типа класса и блокировкой для самого класса?

Например:

private readonly object xmpp = new object();

lock (xmpp)
{
    ...
}

против

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

1 Ответ

19 голосов
/ 18 ноября 2011
  • 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();
...