ПАРАЛЛЕЛЬНОЕ ПРОГРАММИРОВАНИЕ
25
•
процессы автономны, но должны кооперироваться во время выполнения
работы - (писать - читать). Проблема:
очередь пустая / буфер заполнен
;
•
для правильной работы они должны быть синхронизированы друг с дру-
гом. На участке работ с общим ресурсом процессы должны взаимоисклю-
чать друг друга (блокировать друг друга), иначе результат может быть не-
верным и непредсказуемым.
Чтобы исключить ситуацию, когда два или более процессов обрабатывают
разделяемые данные, необходимо обеспечить, чтобы в каждый момент в критиче-
ской секции, связанной с этим ресурсом, находился максимум один процесс. Этот
прием называют взаимным исключением.
Пример 2
. Распределение ресурсов между параллельными процессами
Простая тупиковая ситуация (рис. 3.2) возникает для группы общих ресурсов
(тупик - "смертельное объятие"). Программа 1, захватив ресурс
1
, для продолжения
работы нуждается в ресурсе
2
, который захватила и удерживает программа 2, для
завершения работы которой, в свою очередь, требуется ресурс
1
, удерживаемый
программой 1.
Таким образом, подсистема асинхронными параллельными процессами долж-
на обеспечить решение двух следующих задач:
•
синхронизацию и кооперирование процессов;
•
предотвращение взаимной блокировки процессов по ресурсам.
Рис. 3.2. Тупиковая ситуация
Синхронизация
Задача синхронизации решается методом взаимоисключения процессов при
выполнении их на критических участках. Для взаимоисключения процессов на
критических участках существует три средства:
•
примитивы взаимоисключения;
•
семафоры;
•
мониторы.