Подтвердить что ты не робот

Lock (X) против блокировки (typeof (X))

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

Например:

private readonly object xmpp = new object();

lock (xmpp)
{
    ...
}

против

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

Ответ 1

  • lock(x) синхронизируется с другой блокировкой для каждого экземпляра типа

  • lock(typeof(X)) синхронизирует одну и ту же блокировку для всех экземпляров типа

Всегда блокировать частный объект блокировки:

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

      // ...
            lock (_lock)
            {
            }

Если вы должны синхронизировать доступ к элементам класса static, используйте один и тот же шаблон:

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