Junior — Middle
Kun je een situatie beschrijven waarin in het systeem een wederzijdse blokkering van bronnen optreedt?
sobes.tech AI
Antwoord van AI
Взаимная блокировка (deadlock) возникает, когда два или более потоков (или процессов) одновременно удерживают ресурсы и каждый из них ждет освобождения ресурса, который занят другим потоком. В результате ни один поток не может продолжить работу.
Пример ситуации:
- Поток A захватывает ресурс 1 и пытается получить ресурс 2.
- Поток B захватывает ресурс 2 и пытается получить ресурс 1.
Оба потока ждут друг друга, и программа «зависает».
В Java это может происходить при использовании синхронизированных блоков или объектов-мониторов:
Object resource1 = new Object();
Object resource2 = new Object();
// Поток A
synchronized(resource1) {
Thread.sleep(100);
synchronized(resource2) {
// работа
}
}
// Поток B
synchronized(resource2) {
Thread.sleep(100);
synchronized(resource1) {
// работа
}
}
Чтобы избежать взаимных блокировок, нужно соблюдать порядок захвата ресурсов или использовать механизмы с таймаутами.