Технология программирования для распределенных параллельных систем. Демьянович Ю.К - 52 стр.

UptoLike

Destination!port(e_1, . . ., e_n);
# - выдать e_1, . . ., e_n процессу Destination
# через порт с именем port
Source?port(x_1, . . ., x_n);
# - запросить x_1, . . ., x_n у процесса Source
# через порт с именем port
Здесь Destination и Source процессы (соответственно
процесс-приемник и процесс-источник), port общее для обоих
процессов имя порта (это имя можно не использовать, если имеет-
ся лишь один вид сообщений, при этом скобки можно не писать),
e_1, . . ., e_n и x_1, . . ., x_n имена переменных соответ-
ствующих типов.
При использовании массива источников возможно обращение к
определенному элементу этого массива в виде
Source[i]?port(x_1, . . ., x_n);
а также возможен запрос ко всем источникам массива в виде
Source[*]?port(x_1, . . ., x_n);
Простым примером является следующий процесс-фильтр:
process Copy {
char c;
do true -->
West?c; # запросить символ у процесса West
East!c; # выдать символ процессу East
od
}
Оператор ввода ждет, пока процесс West будет готов принять
символ, а оператор вывода ждет, пока процесс East будет готов
выдать символ; оба выполняются одновременно.
Язык CSP использует понятие защищенных команд.
Рассмотрим процесс отыскания наибольшего делителя двух по-
ложительных целых чисел x и y (алгоритм Евклида).
53