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-ны күтеді. Нәтижесінде өзара блоктау пайда болады.