Sobes.tech
Junior — Middle

Sistemlərdə proseslərin qarşılıqlı bloklanması halları baş veribmi?

sobes.tech Süni İntellekt

AI-dan cavab

Bəli, qarşılıqlı bloklama (deadlock) — bu, iki və ya daha çox proses və ya iş parçacığının bir-birindən resursların sərbəst buraxılmasını sonsuz müddətə gözlədiyi vəziyyətdir.

Java-da bu, sinxronizasiyanın düzgün istifadə edilməməsi nəticəsində baş verə bilər, məsələn, iki iş parçacığının iki monitor obyektini fərqli ardıcıllıqla əldə etməyə çalışması zamanı.

Nümunə:

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

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

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

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

Deadlock-u qarşısını almaq üçün, kilidləri əldə etmə ardıcıllığını izləmək və resursların tutulma müddətini minimallaşdırmaq vacibdir.