Sobes.tech
Назад к вопросам
Senior
7

Что такое deadlock?

Компании, где спрашивали
.wrk

Ответ от нейросети

sobes.tech AI

Deadlock (взаимная блокировка) — ситуация в многопоточных или многопроцессных системах, когда два или более потока (или процесса) навсегда блокируют друг друга, ожидая освобождения ресурсов, занятых друг другом.

Пример: Поток A захватил ресурс 1 и ждёт ресурс 2, а поток B захватил ресурс 2 и ждёт ресурс 1. Ни один из них не может продолжить работу.

В C/C++ deadlock часто возникает при неправильном использовании мьютексов:

std::mutex m1, m2;

void thread1() {
    std::lock_guard<std::mutex> lock1(m1);
    // ...
    std::lock_guard<std::mutex> lock2(m2);
    // ...
}

void thread2() {
    std::lock_guard<std::mutex> lock1(m2);
    // ...
    std::lock_guard<std::mutex> lock2(m1);
    // ...
}

Если thread1 захватит m1, а thread2 — m2, оба будут ждать друг друга, что приведёт к deadlock.

Для предотвращения deadlock используют:

  • фиксированный порядок захвата ресурсов,
  • таймауты,
  • функции типа std::lock для одновременного захвата нескольких мьютексов.