ПАРАЛЛЕЛЬНОЕ ПРОГРАММИРОВАНИЕ
          
        
        
          
            24
          
        
        
          •
        
        
          проблема синхронизации параллельных процессов;
        
        
          •
        
        
          проблема взаимной блокировки – тупика (“
        
        
          
            смертельное объятие”-
          
        
        
          
            dead
          
        
        
          
            lock).
          
        
        
          
            Пример 1.
          
        
        
          Писатели – читатели
        
        
          Рассмотрим программу печати сообщений (принт-сервер). Эта программа пе-
        
        
          чатает по очереди все сообщения, которые последовательно в порядке поступления
        
        
          записывают в специальный общедоступный файл другие программы (рис. 3.1). Осо-
        
        
          бая переменная
        
        
          
            N
          
        
        
          , также доступная всем процессам-клиентам, содержит номер пер-
        
        
          вого свободного для записи сообщения. Процессы-клиенты читают эту переменную,
        
        
          записывают в соответствующую позицию сообщение и наращивают значение
        
        
          
            N
          
        
        
          на
        
        
          единицу. Предположим, что в некоторый момент процесс
        
        
          
            R
          
        
        
          решил распечатать со-
        
        
          общение, для этого он прочитал значение переменной
        
        
          
            N
          
        
        
          , значение которой для оп-
        
        
          ределенности предположим равным 4. Процесс запомнил это значение, но помес-
        
        
          тить сообщение не успел, так как его выполнение было прервано (например, вслед-
        
        
          ствие исчерпания кванта). Очередной процесс
        
        
          
            S
          
        
        
          , желающий распечатать сообщение,
        
        
          прочитал то же самое значение переменной
        
        
          
            N
          
        
        
          , поместил в четвертую позицию свое
        
        
          сообщение и нарастил значение переменной на единицу. Когда в очередной раз
        
        
          управление будет передано процессу
        
        
          
            R
          
        
        
          , то он, продолжая свое выполнение, в пол-
        
        
          ном соответствии со значением текущей свободной позиции, полученным во время
        
        
          предыдущей итерации, запишет сообщение также в позицию 4, поверх сообщения
        
        
          процесса
        
        
          
            S
          
        
        
          .
        
        
          
            Рис. 3.1. Кооперация программ при работе с общим ресурсом
          
        
        
          Таким образом, процесс
        
        
          
            S
          
        
        
          никогда не увидит свой сообщение распечатанным.
        
        
          Особенности взаимодействия: