Middle+
Pouvez-vous donner un exemple de situation où il y a un blocage mutuel des processus, les empêchant de se débloquer pour toujours?
sobes.tech IA
Réponse de l'IA
Le blocage mutuel (deadlock) se produit lorsque deux processus ou plus (ou threads) maintiennent simultanément des ressources et que chacun attend la libération d’une ressource détenue par l’autre. En conséquence, aucun d’eux ne peut continuer.
Exemple :
- Le processus A acquiert la ressource R1.
- Le processus B acquiert la ressource R2.
- Le processus A tente d’acquérir la ressource R2 et se bloque en attendant sa libération.
- Le processus B tente d’acquérir la ressource R1 et se bloque également.
Les deux processus attendent l’un l’autre, ce qui conduit à un blocage infini.
Exemple en C++ avec des 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 a acquis les deux verrous\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 a acquis les deux verrous\n";
}
int main() {
std::thread t1(thread1);
std::thread t2(thread2);
t1.join();
t2.join();
return 0;
}
Dans cet exemple, un blocage mutuel peut se produire si thread1 acquiert mtx1 et thread2 acquiert mtx2, et que tous deux attendent l’autre.