- 40 -
Предупреждение: Используемые в этой теме
функции, типы переменных и некоторые син-
таксические конструкции служат чисто ил-
люстративным целям и не всегда соответст-
вуют стандартам языка С. Используемые
функции, даже совпадающие по названию с
существующими в библиотеке C или PARIX
TM
,
не соответствуют реальному формату вызо-
ва последних и с формальной точки зрения не
могут использоваться в качестве образцов для
подражания при написании реальных про-
грамм.
Проблема тупиков, недетерминированность параллель-
ных алгоритмов
Представим себе столовую в парке, по которому прогулива-
ются беседующие философы. У столовой один вход, около которого
стоит дворецкий. Внутри расположен круглый стол на котором по
кругу расставлены пять тарелок и положены пять вилок. По центру
стола находится большое блюдо спагетти, исправно пополняемое
официантом. Сев за стол, очередной философ берет две вилки - свою и
любую свободную, и кладет ими спагетти с общего блюда себе в та-
релку. Сразу после этого он кладет чужую вилку на место и начинает
есть. Поев, он кладет свою вилку на место и уходит. Будем считать,
что вилками, положенными на стол после накладывания спагетти или
в конце еды, может сразу же воспользоваться любой философ, не при-
нимая во внимание процесс обеспечения чистоты столовых приборов.
Рассмотрим трудности, которые могут возникнуть у филосо-
фов при таком обслуживании. Основное коварство скрыто во фразе
«очередной философ берет две вилки». До тех пор, пока философов
меньше 5 вторая вилка по крайней мере для одного из философов най-
дется. Это значит, что он сможет положить себе спагетти и освобо-
дившаяся вилка достанется следующему. Тем самым рано или поздно
все сидящие за столом философы получат в свое распоряжение вто-
рую вилку и смогут приступить к еде. Но что произойдет, если за сто-
лом окажутся одновременно 5 человек?
Если кто -то из философов к моменту появления пятого чело-
века уже положил себе спагетти и начал есть, то пятый, дождавшись,
пока этот кто-то закончит трапезу, получит его вилку и сможет в свою
очередь приступить к еде. Но предположим, что к незанятому столу
одновременно подошла и села компания из пяти человек, и все одно-
временно взяли свои вилки. Результат: у каждого по одной вилке, на
столе свободных вилок нет. Никто не может положить себе спагетти и