ПАРАЛЛЕЛЬНОЕ ПРОГРАММИРОВАНИЕ
24
проблема синхронизации параллельных процессов;
проблема взаимной блокировки – тупика (“
смертельное объятие”-
dead
lock).
Пример 1.
Писатели – читатели
Рассмотрим программу печати сообщений (принт-сервер). Эта программа пе-
чатает по очереди все сообщения, которые последовательно в порядке поступления
записывают в специальный общедоступный файл другие программы (рис. 3.1). Осо-
бая переменная
N
, также доступная всем процессам-клиентам, содержит номер пер-
вого свободного для записи сообщения. Процессы-клиенты читают эту переменную,
записывают в соответствующую позицию сообщение и наращивают значение
N
на
единицу. Предположим, что в некоторый момент процесс
R
решил распечатать со-
общение, для этого он прочитал значение переменной
N
, значение которой для оп-
ределенности предположим равным 4. Процесс запомнил это значение, но помес-
тить сообщение не успел, так как его выполнение было прервано (например, вслед-
ствие исчерпания кванта). Очередной процесс
S
, желающий распечатать сообщение,
прочитал то же самое значение переменной
N
, поместил в четвертую позицию свое
сообщение и нарастил значение переменной на единицу. Когда в очередной раз
управление будет передано процессу
R
, то он, продолжая свое выполнение, в пол-
ном соответствии со значением текущей свободной позиции, полученным во время
предыдущей итерации, запишет сообщение также в позицию 4, поверх сообщения
процесса
S
.
Рис. 3.1. Кооперация программ при работе с общим ресурсом
Таким образом, процесс
S
никогда не увидит свой сообщение распечатанным.
Особенности взаимодействия:
1...,16,17,18,19,20,21,22,23,24,25 27,28,29,30,31,32,33,34,35,36,...180