Вероятно, вы не раз наблюдали на трамвайной остановке следующую забавную картину (рис. 29.6).
Рис 29.6. Ситуации тупиков возникают не только в программировании
Рисунок дает исчерпывающее пояснение ситуации тупиков. Тупики имеют место, когда поток ожидает ресурс, который в данный момент принадлежит другому потоку. Рассмотрим пример. Поток 1 захватывает ресурс А, и для того чтобы продолжать работу, ждет возможности захватить ресурс Б. В то же время Поток 2 захватывает ресурс Б и ждет возможности захватить ресурс А. Развитие этого сценария заблокирует оба потока; ни один из них не будет исполняться. Ресурсами могут выступать любые совместно используемые объекты системы — файлы, массивы в памяти, устройства ввода/вывода и т. п.
В ситуации на картинке три трамвая захватили
по одному ресурсу (перекрестку) и пытаются захватить еще один, что, очевидно,
невозможно без освобождения уже захваченных. В жизни ситуация разрешилась просто