Sobes.tech
Назад к вопросам
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) {
        // работа
    }
}

Чтобы избежать взаимных блокировок, нужно соблюдать порядок захвата ресурсов или использовать механизмы с таймаутами.