Здесь более уместна асинхронная передача сообщений: зависа-
ний не будет, программа отработает без задержки. При асинхрон-
ной передаче легко модифицировать программу при увеличении
числа процессов.
Замечание. Недостаток асинхронных передач (и в отдельных
случаях — весьма существенный) состоит в том, что резко ослабе-
вает контроль за вычислительным процессом: в частности, может
быть изменен порядок арифметиче ски х действий, что, как извест-
но, может привести к большим вычислительным погрешностям.
§ 2. Операторы взаимодействия
Предположим, что процесс А собирается передать значение про-
цессу В, а процесс В — получить это значение.
Это запишем, используя нотацию языка CSP (Communicating
Sequential Process).
process A {. . . B!e; . . .} # оператор вывода: выдать
process B {. . . A?x; . . .} # оператор ввода: запросить
Язык CSP характеризуется использованием так называемого за-
щищенного взаимодействия, о котором речь пойдет ниже.
В приведенном фрагменте использованы операторы:
B!e — оператор вывода; лучше всего его читать так: “выдать e
процессу B”.
A?x — оператор ввода, который читается так: “запросить x у
процесса A”.
Если типы переменных e и x совпадают, то операторы ввода и
вывода называются согласованными.
Эти операторы приостанавливают каждый из процессов до тех
пор пока другой пр оцес с не подойдет к выполнению соответству-
ющего согласованного оператора, после чего оба оператора выпол -
няются одновременно. Выполнение согласованных операторов мож-
но рассматривать как распределенное присваивание : здесь значение
переменной из одного процесса присваивается переменной другого
процесса. На момент такого присваивания процессы синхронизиру-
ются, а далее выполняются независимо.
Общий вид операторов ввода и вывода таков:
52