Sobes.tech
Junior — Middle

Կան դեպքեր, երբ դուք բախվել եք համակարգերի գործընթացների փոխադարձ բլոկավորմանը:

sobes.tech AI

Պատասխան AI-ից

Այո, փոխադարձ բլոկավորում (deadlock) — դա իրավիճակ է, երբ երկու կամ ավելի գործընթացներ կամ թելեր անընդհատ սպասում են միմյանցից ռեսուրսների ազատ արձակմանը:

Java-ում դա կարող է տեղի ունենալ սխալ սինխրոնիզացիայի օգտագործման պատճառով, օրինակ՝ երբ երկու թել փորձում են ձեռք բերել երկու մոնիտոր օբյեկտ տարբեր կարգով:

Օրինակ՝

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

Thread t1 = new Thread(() -> {
    synchronized(lock1) {
        try { Thread.sleep(100); } catch (InterruptedException e) {}
        synchronized(lock2) {
            // աշխատանք
        }
    }
});

Thread t2 = new Thread(() -> {
    synchronized(lock2) {
        try { Thread.sleep(100); } catch (InterruptedException e) {}
        synchronized(lock1) {
            // աշխատանք
        }
    }
});

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

Deadlock-ից խուսափելու համար կարևոր է հետևել բլոկների ձեռքբերման կարգին և նվազեցնել ռեսուրսների պահման ժամանակը։