Sobes.tech
Junior — Middle

Pouvez-vous décrire une situation où le système rencontre un blocage mutuel des ressources?

sobes.tech IA

Réponse de l'IA

Взаимная блокировка (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) {
        // работа
    }
}

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