Что будет выведено в C#-коде с вложенными lock на одном syncObject? Будет ли deadlock и почему?

Вложенный lock на одном и том же обычном объекте в одном потоке не вызывает deadlock: Monitor реентерабелен. Точный вывод зависит от отсутствующих в условии инструкций печати.

Короткий ответ

Что ответить на собеседовании

Вложенный lock на одном и том же обычном объекте в одном потоке не вызывает deadlock: Monitor реентерабелен. Точный вывод зависит от отсутствующих в условии инструкций печати.

Подробный разбор

Ответ с пояснениями

Вложенный lock на одном и том же обычном объекте в одном потоке не вызывает deadlock: Monitor реентерабелен. Точный вывод зависит от отсутствующих в условии инструкций печати.

Повторный вход увеличивает счётчик захватов текущего потока. Чтобы другой поток получил монитор, нужно выйти из всех соответствующих lock. Поэтому обычные вложенные блоки выполнятся последовательно, а затем завершатся.

Это не делает произвольный код безопасным от deadlock: ожидание другого потока, которому тоже нужен этот lock, может создать цикл. Нельзя также переносить гарантию на разные объекты синхронизации или на неописанный порядок их захвата.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее