Middle+
105
Можете привести пример ситуации, когда происходит взаимная блокировка процессов, заставляющая их зависнуть навсегда?
Сұралған компаниялар
AI-дан жауап
sobes.tech AI
Взаимная блокировка (deadlock) происходит, когда два или более процесса (или потока) одновременно удерживают ресурсы и каждый из них ждёт освобождения ресурса, который удерживает другой процесс. В результате ни один из них не может продолжить работу.
Пример:
- Процесс A захватывает ресурс R1.
- Процесс B захватывает ресурс R2.
- Процесс A пытается захватить ресурс R2 и блокируется, ожидая его освобождения.
- Процесс B пытается захватить ресурс R1 и также блокируется.
Оба процесса ждут друг друга, что приводит к бесконечной блокировке.
Пример на C++ с мьютексами:
#include <mutex>
#include <thread>
#include <iostream>
std::mutex mtx1, mtx2;
void thread1() {
std::lock_guard<std::mutex> lock1(mtx1);
std::this_thread::sleep_for(std::chrono::milliseconds(100));
std::lock_guard<std::mutex> lock2(mtx2);
std::cout << "Thread 1 acquired both locks\n";
}
void thread2() {
std::lock_guard<std::mutex> lock2(mtx2);
std::this_thread::sleep_for(std::chrono::milliseconds(100));
std::lock_guard<std::mutex> lock1(mtx1);
std::cout << "Thread 2 acquired both locks\n";
}
int main() {
std::thread t1(thread1);
std::thread t2(thread2);
t1.join();
t2.join();
return 0;
}
В этом примере возможна взаимная блокировка, если thread1 захватит mtx1, а thread2 — mtx2, и оба будут ждать друг друга.