Составители:
sum s = 1;
process CS[j = 1 to n] {
while (true) {
P(s);
[критическая секция];
V(s);
[некритическая секция];
}
}
В барьерной синхронизации семафор используется как флаг
синхронизации. Процесс устанавливает флаг, выполняя операцию
V; при выполнении операции P он ждет установки флага, а посл е
его установки прекращает ожидание и сбрасывает флаг.
Сигнализирующий семафор — это семафор с нулевым значе-
нием. Процесс сигнализирует о событии, устанавливая флаг с по-
мощью операции V(s), а другие проц есс ы ожидают этого сигнала,
выполняя операцию P(s). При двухпроцессорном барьере имеется
два существенных события: 1) прибытие к барьеру первого процес-
са; 2) прибытие к барьер у второго процесса; поэ тому требуется два
флага для сигнализации об этих событиях. Воспользуемся флагами
arrive1 и arrive2.
sem arrive1 = 0, arrive2 = 0;
process Worker1 {
. . .
V(arrive1); # прибытие I процесса
P(arrive2); # ожидание прибытия II процесса
. . .
}
process Worker2 {
. . .
V(arrive2); # прибытие II процесса
P(arrive1); # ожидание прибытия I процесса
82
Страницы
- « первая
- ‹ предыдущая
- …
- 79
- 80
- 81
- 82
- 83
- …
- следующая ›
- последняя »
