Sobes.tech
Junior — Middle
114

Какое различие существует между механизмами блокировки Lock и Monitor в контексте управления потоками?

Answer from AI

sobes.tech AI

lock в C# — это синтаксический сахар над классом Monitor.

Основные различия:

  • lock автоматически вызывает Monitor.Enter в начале блока и Monitor.Exit в конце, обеспечивая корректное освобождение блокировки даже при исключениях.
  • Monitor предоставляет более низкоуровневый API с дополнительными возможностями, например, Monitor.TryEnter для попытки захвата блокировки без ожидания, а также методы для ожидания и уведомления (Wait, Pulse, PulseAll).

Пример использования lock:

private readonly object _sync = new object();

lock (_sync)
{
    // критическая секция
}

Эквивалент с Monitor:

Monitor.Enter(_sync);
try
{
    // критическая секция
}
finally
{
    Monitor.Exit(_sync);
}

Таким образом, lock удобнее и безопаснее для большинства случаев, а Monitor — для более тонкого управления потоками.