Назад к вопросам
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для одновременного захвата нескольких мьютексов.