Middle
45
questionbank

Какое минимальное количество мьютексов необходимо для возникновения дедлока?

Получайте ответы на вопросы в реальном времени с Sobes Copilot
Ответ от нейросети sobes.tech

Минимальное количество мьютексов для возникновения дедлока — два.

Дедлок может произойти при соблюдении четырех условий (условия Коффмана):

  1. Взаимное исключение (Mutual Exclusion): Ресурсы должны быть несовместно используемыми (non-shareable). В данном случае, мьютексы обеспечивают это.
  2. Удержание и ожидание (Hold and Wait): Процесс, уже владеющий одним мьютексом, пытается захватить еще один мьютекс, который занят другим процессом.
  3. Непередаваемость (No Preemption): Захваченный мьютекс не может быть принудительно отобран у процесса; он может быть освобожден только самим процессом.
  4. Циклическое ожидание (Circular Wait): Существует цепочка процессов, где каждый процесс ожидает мьютекс, захваченный следующим процессом в цепочке, и последний процесс в цепочке ожидает мьютекс, захваченный первым процессом.

Пример с двумя мьютексами:

c

В этом примере, если Поток 1 захватит mtx1, а Поток 2 захватит mtx2 почти одновременно, то Поток 1 будет ждать mtx2 (который занят Потоком 2), а Поток 2 будет ждать mtx1 (который занят Потоком 1). Возникает циклическое ожидание между двумя потоками и двумя мьютексами.