Выбор ответа Junior sync и атомики обновлено

Повторный Lock в той же горутине

Вопрос

Что произойдёт, если горутина, уже держащая sync.Mutex, вызовет Lock ещё раз?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Дедлок: мьютекс в Go не реентерабельный. Mutex в Go не знает владельца и не поддерживает повторный захват: вторая попытка ждёт освобождения, которого никогда не будет.

Варианты ответа

  1. Дедлок: мьютекс в Go не реентерабельныйправильный ответ
  2. Ничего, счётчик блокировок увеличится
  3. panic: mutex already locked
  4. Второй Lock будет проигнорирован

Разбор

Mutex в Go не знает владельца и не поддерживает повторный захват: вторая попытка ждёт освобождения, которого никогда не будет. Если это единственная работающая горутина, рантайм сообщит о deadlock, иначе сервис просто повиснет. Паники нет. Решение: разделить публичные методы (берут блокировку) и внутренние (lockedXxx, ожидают, что блокировка уже взята).

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.