Языки программирования - концепции и принципы

Синхронизация процессов обеспечивается автоматически. Недостаток


Синхронизация процессов обеспечивается автоматически. Недостаток монитора в том, что он является централизован­ным средством.

   Первоначально модель параллелизма в языке Ada (описанная ниже в раз­деле 12.7) была чрезвычайно сложной и требовала слишком больших затрат для решения простых проблем взаимных исключений. Чтобы это исправить, в Ada 95 были введены средства, аналогичные мониторам, которые называ­ются защищенными переменными (protected variables). Например, семафор можно смоделировать как защищенную переменную. Этот интерфейс опре­деляет две операции, но целочисленное значение семафора рассматривает как приватное (private), что означает, что оно недоступно для пользователей семафора:

protected type Semaphore is

      entry Wait;

      procedure Signal;

private

      Value: Integer := 1;

end Semaphore;

Реализация семафора выглядит следующим образом:

protected body Semaphore is

      entry Wait when Value > 0 is

      begin



Ada

           Value := Value- 1;

       end Wait;

      procedure Signal is

      begin

          Value := Value + 1 ;

        end Signal;

end Semaphore;

Выполнение entry и procedure взаимно исключено: в любой момент времени только одна задача будет выполнять операцию с защищенной переменной. К тому же entry имеет барьер (barrier), который является булевым выражением. Задача, пытающаяся выполнить entry, будет заблокирована, если выражение имеет значение «ложь». Всякий раз при завершении защищенной операции все барьеры будут перевычисляться, и будет разрешено выполнение той зада­чи, барьер которой имеет значение «истина». В приведенном примере, когда Signal увеличит Value, барьер в Wait будет иметь значение «истина», и забло­кированная задача сможет выполнить тело entry.

12.5. Передача сообщений

 

По мере того как компьютерные аппаратные средства дешевеют, распреде­ленное программирование приобретает все большее значение.

Содержание раздела