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-ից խուսափելու համար կարևոր է հետևել բլոկների ձեռքբերման կարգին և նվազեցնել ռեսուրսների պահման ժամանակը։