Составители:
. . .
}
В случае n процессов можно реализовать барьер–бабочку или
барьер с распространением (см. предыдущую главу). В этих случа-
ях потребуется массив семафоров arrive[n]. При наличии управля-
ющего процесса можно обойтись одинм (прос тым) семафором.
§3 Разделенные двоичные семафоры
Предположим, имеется несколько пр оизводителей и несколько по-
требителей, которые общаются через разделяемый буфер.
Производители пользуются этим буфером , пом ещая туда ре-
зультаты своей деятельности (“товар”) операцией deposite — поме-
стить, а пользователи забирают этот “товар” с помощью операции
fetch — извлечь.
Предполагается, что буфер заполняется в одном акте проце-
дурой deposite, а опустошение его также проводится за один акт
процедурой fetch. Для того, чтобы заполнение было возможно,
необходим о извлечение, т.е. заполнение и извлечение должны про-
изводиться по-очеред и.
Пусть empty и full — разделяемые двоичные семафоры.
empty =
(
1, если буфер опустошен,
0, если буфер заполнен;
full =
(
0, если буфер пуст,
1, если он заполнен.
СХЕМА ПРОГРАММЫ “ПРОИЗВОДИТЕЛИ И
ПОТРЕБИТЕЛИ”
typeT buf; # буфер некоторого типа T
sem empty = 1, full = 0;
process Producer[i = 1 to M] {
while (true) {
. . . # произвести data
83
Страницы
- « первая
- ‹ предыдущая
- …
- 80
- 81
- 82
- 83
- 84
- …
- следующая ›
- последняя »