Sobes.tech
Junior — Middle

Vai ir bijušas gadījums, kad jūs saskaraties ar savstarpēju procesu bloķēšanu sistēmās?

sobes.tech AI

Atbilde no AI

Jā, savstarpējā bloķēšana (deadlock) ir situācija, kad divi vai vairāki procesi vai pavedieni mūžīgi gaida viens otra resursu atbrīvošanu.

Java gadījumā tas var notikt nepareizas sinhronizācijas izmantošanas dēļ, piemēram, kad divi pavedieni mēģina iegūt divus monitoru objektus dažādā secībā.

Piemērs:

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

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

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

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

Lai izvairītos no deadlock, ir svarīgi ievērot bloķu iegūšanas kārtību un samazināt resursu turēšanas laiku.