Junior — Middle
Ar buvo atvejų, kai susidūrėte su tarpusavio procesų užblokavimuose sistemose?
sobes.tech AI
Atsakymas iš AI
Taip, tarpusavio užraktas (deadlock) yra situacija, kai du ar daugiau procesų arba sriegių amžinai laukia vienas kito išlaisvinti išteklius.
Java kalboje tai gali įvykti dėl netinkamo sinchronizacijos naudojimo, pavyzdžiui, kai du sriegi bando įgyti du monitoriaus objektus skirtinga tvarka.
Pavyzdys:
Object lock1 = new Object();
Object lock2 = new Object();
Thread t1 = new Thread(() -> {
synchronized(lock1) {
try { Thread.sleep(100); } catch (InterruptedException e) {}
synchronized(lock2) {
// darbas
}
}
});
Thread t2 = new Thread(() -> {
synchronized(lock2) {
try { Thread.sleep(100); } catch (InterruptedException e) {}
synchronized(lock1) {
// darbas
}
}
});
t1.start();
t2.start();
Norint išvengti deadlock, svarbu laikytis užraktų įgijimo tvarkos ir sumažinti išteklių laikymo laiką.