Sobes.tech
Junior — Middle

Жүйеде немесе өмірде өзара ресурстарды блоктау болған нақты мысалды келтіре аласыз ба?

sobes.tech AI

AI-дан жауап

Өзара блоктау (deadlock) — екі немесе одан да көп процесс (немесе ағын) бір-бірінің ресурстарын босатуды күтетін жағдай, және ешқайсысы жұмысын жалғастыра алмайды.

Тірі мысал: екі адам тар corridor-да бір-біріне қарсы келе жатыр, және әрқайсысы басқаға жол береді, ешқайсысы артқа шегінгісі келмейді. Соның нәтижесінде олар екеуі де орнында тұрып қалады және өтіп кете алмайды.

Java бағдарламалау тілінде мысал:

Object resourceA = new Object();
Object resourceB = new Object();

Thread thread1 = new Thread(() -> {
    synchronized (resourceA) {
        try { Thread.sleep(100); } catch (InterruptedException e) {}
        synchronized (resourceB) {
            System.out.println("Thread 1 екі ресурсты да алды");
        }
    }
});

Thread thread2 = new Thread(() -> {
    synchronized (resourceB) {
        try { Thread.sleep(100); } catch (InterruptedException e) {}
        synchronized (resourceA) {
            System.out.println("Thread 2 екі ресурсты да алды");
        }
    }
});

thread1.start();
thread2.start();

Мұнда thread1 resourceA-ны алады да, resourceB-ны күтеді, ал thread2 керісінше — resourceB-ны алады да, resourceA-ны күтеді. Нәтижесінде өзара блоктау пайда болады.