Sobes.tech
Junior — Middle

Stali sa prípady, keď ste sa stretli s vzájomným blokovaním procesov v systémoch?

sobes.tech AI

Odpoveď od AI

Áno, mŕtvy zámok (deadlock) je situácia, keď dva alebo viac procesov alebo vlákien navždy čakajú na uvoľnenie zdrojov od seba.

V Jave sa to môže stať nesprávnym použitím synchronizácie, napríklad keď dve vlákna sa pokúšajú získať dva monitorové objekty v odlišnom poradí.

Prí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áca
        }
    }
});

Thread t2 = new Thread(() -> {
    synchronized(lock2) {
        try { Thread.sleep(100); } catch (InterruptedException e) {}
        synchronized(lock1) {
            // práca
        }
    }
});

t1.start();
t2.start();

Aby ste predišli deadlocku, je dôležité dodržiavať poradie pri získavaní zámkov a minimalizovať dobu držania zdrojov.