Junior — Middle
Y a-t-il eu des cas où vous avez été confronté à un blocage mutuel de processus dans des systèmes?
sobes.tech IA
Réponse de l'IA
Oui, le blocage mutuel (deadlock) est une situation où deux ou plusieurs processus ou threads attendent indéfiniment la libération de ressources les uns par les autres.
En Java, cela peut se produire en cas d'utilisation incorrecte de la synchronisation, par exemple lorsque deux threads tentent d'acquérir deux objets moniteur dans un ordre différent.
Exemple :
Object lock1 = new Object();
Object lock2 = new Object();
Thread t1 = new Thread(() -> {
synchronized(lock1) {
try { Thread.sleep(100); } catch (InterruptedException e) {}
synchronized(lock2) {
// travail
}
}
});
Thread t2 = new Thread(() -> {
synchronized(lock2) {
try { Thread.sleep(100); } catch (InterruptedException e) {}
synchronized(lock1) {
// travail
}
}
});
t1.start();
t2.start();
Pour éviter le deadlock, il est important de respecter un ordre dans la prise de verrouillage et de minimiser la durée de détention des ressources.