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