Middle+
Puoi fare un esempio di una situazione in cui si verifica un deadlock tra processi che li blocca per sempre?
sobes.tech AI
Risposta dell'AI
Il deadlock (interblocco) si verifica quando due o più processi (o thread) mantengono risorse contemporaneamente e ciascuno aspetta che l’altro rilasci una risorsa. Di conseguenza, nessuno può continuare.
Esempio:
- Il processo A acquisisce la risorsa R1.
- Il processo B acquisisce la risorsa R2.
- Il processo A tenta di acquisire la risorsa R2 e si blocca in attesa che venga rilasciata.
- Il processo B tenta di acquisire la risorsa R1 e si blocca anch’esso.
Entrambi i processi aspettano l’uno l’altro, portando a un deadlock infinito.
Esempio in C++ con mutex:
#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 ha acquisito entrambi i lock\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 ha acquisito entrambi i lock\n";
}
int main() {
std::thread t1(thread1);
std::thread t2(thread2);
t1.join();
t2.join();
return 0;
}
In questo esempio, può verificarsi un deadlock se thread1 acquisisce mtx1 e thread2 acquisisce mtx2, e entrambi aspettano l’uno l’altro.