Составители:
Рубрика:
2) в отправке сообщения в конец очереди, связанной с каналом
ch.
Теоретически очередь не ограничена; поэтому посылка сообще-
ния не вызывает задержку, и следовательно операция send являет-
ся неблокирующим примитивом.
Процесс получающий сообщение из канала выполняет операцию
receive:
receive ch(var
1
, . . . , var
n
); (3)
Переменные должны иметь тот же тип, что и поля в объявлении ка-
нала (1). Процесс, получающий сообщение по команде (3), приоста-
навливается до тех пор, пока в очереди канала не появится хотя бы
одно сообщение. Итак, операция receive может вызвать задерж-
ку — поэтому это блокирующий примитив; процесс, принимающий
сообщение, не обязан использовать опрос канала для получения со-
общения.
Доступ к каждому каналу — неделимое действие; каждое пере-
данное сообщение будет принято в том порядке, в каком отправлено
(канал является очередью типа FIFO).
Пример 2. Формирование строк из символов.
chan input(char), output(char[MAXLINE]);
process Char_to_Line{
char line[MAXLINE]; int i=0;
while(true){
receive input(line[i]);
while(line[i]!=CR and i<MAXLINE){
# line[0:i-1] содержит i входных символов
i=i+1;
receive input(line[i]);
}
line[i]=EOL;
send output(line);
i=0;
}
}
П о я с н е н и я : сначала объявляется канал input для отдель-
ных символов и канал output для получения строк. Далее объяв-
ляется процесс Char_to_Line, в котором, пока параметр “ис тина”,
9
Страницы
- « первая
- ‹ предыдущая
- …
- 6
- 7
- 8
- 9
- 10
- …
- следующая ›
- последняя »