Junior — Middle
102
Puoi descrivere una situazione in cui nel sistema si verifica un deadlock di risorse?
Risposta dell'AI
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) {
// работа
}
}
Чтобы избежать взаимных блокировок, нужно соблюдать порядок захвата ресурсов или использовать механизмы с таймаутами.