Sobes.tech
Junior — Middle

Da li su se dešavali slučajevi kada ste se susretali sa međusobnim blokadama procesa u sistemima?

sobes.tech АИ

Одговор од АИ

Da, međuzavisno blokiranje (deadlock) je situacija u kojoj dva ili više procesa ili niti zauvek čekaju da se oslobode resursi od strane drugih.

U Javi, to se može dogoditi zbog nepravilne upotrebe sinhronizacije, na primer kada dve niti pokušavaju da steknu dva monitor objekta u različitom redosledu.

Primer:

Object lock1 = new Object();
Object lock2 = new Object();

Thread t1 = new Thread(() -> {
    synchronized(lock1) {
        try { Thread.sleep(100); } catch (InterruptedException e) {}
        synchronized(lock2) {
            // rad
        }
    }
});

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

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

Da biste izbegli deadlock, važno je pridržavati se reda u sticanju blokada i minimizirati vreme zadržavanja resursa.