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