«Сегодня я узнал, что тупик возникает, когда вы не можете хорошо управлять своими блокировками».

Мы используем блокировки для управления доступом к общим ресурсам. В многопоточных средах решающее значение имеет обеспечение целостности и согласованности ресурсов. Однако невнимательное использование блокировок может вызвать взаимоблокировки.

Тупик

Тупиковая ситуация возникает, когда ожидающий процесс все еще удерживает другой ресурс, который нужен первому, прежде чем он сможет завершиться.

Давайте посмотрим на пример, чтобы увидеть, как возникает тупик:

  • Процесс A хочет получить доступ к ресурсу X и блокирует его, чтобы гарантировать, что он не будет изменен.
  • В то же время процесс B хочет получить доступ к ресурсу Y и делает то же самое, что и A, и блокирует Y исключительно для себя.
  • На следующем этапе процессу A требуется значение Y, чтобы он мог продолжить свою работу, но он не может получить его, потому что он заблокировано процессом B.
  • В то же время процессу B требуется значение X для продолжения работы, но он может аннотировать его либо потому, что X заблокировано процессом A.

Итак, в приведенном выше примере процесс A ожидает Y, а процесс B одновременно ожидает X, создавая бесконечный цикл ожидания, который называется тупиковой ситуацией.

Пример взаимоблокировки на Java

Ура!