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-ის თავიდან ასაცილებლად მნიშვნელოვანია, რომ დაიცვათ ბლოკირების მიღების წესრიგი და მინიმუმამდე შეამციროთ რესურსების შენარჩუნების დრო.