Sobes.tech
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ů.