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