Назад к вопросам
Junior — Middle
66
Можешь описать ситуацию, когда в системе возникает взаимная блокировка ресурсов?
Ответ от нейросети
sobes.tech 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) {
// работа
}
}
Чтобы избежать взаимных блокировок, нужно соблюдать порядок захвата ресурсов или использовать механизмы с таймаутами.