Junior — Middle
Stalo se někdy, že jste se setkali s vzájemným blokováním procesů v systémech?
sobes.tech AI
Odpověď od AI
Ano, deadlock (zacyklení) je situace, kdy dva nebo více procesů nebo vláken navždy čekají na uvolnění zdrojů od sebe navzájem.
V jazyce Java může k tomu dojít při nesprávném použití synchronizace, například když se dvě vlákna pokusí získat dva monitory v odlišném pořadí.
Příklad:
Object lock1 = new Object();
Object lock2 = new Object();
Thread t1 = new Thread(() -> {
synchronized(lock1) {
try { Thread.sleep(100); } catch (InterruptedException e) {}
synchronized(lock2) {
// práce
}
}
});
Thread t2 = new Thread(() -> {
synchronized(lock2) {
try { Thread.sleep(100); } catch (InterruptedException e) {}
synchronized(lock1) {
// práce
}
}
});
t1.start();
t2.start();
Abychom se vyhnuli deadlocku, je důležité dodržovat pořadí při získávání zámků a minimalizovat dobu držení zdrojů.