Составители:
Инвариант RW является истинным в начале работы программы
и перед каждой операцией V и потому он истинен, если один из
семафоров имеет значение 1.
При выполнении каждого защищенного оператора условия
упомянутый инвариант оказывается истинным, ибо его истинность
установил либо сам процесс, либо семафор, сигнализирующий о
приостановке данного процесса.
Заметим, что нет также и взаимных блокировок, т.к. семафор
задержки получает сигнал только, если некоторый процесс нахо-
дится в состоянии ожидания или должен в него войти (процесс
может увеличить счетчик ожидающих процессов и выполнять опе-
рацию V(e), но не может выполнить операцию P для семафора за-
держки).
Описанный метод называется методом передачи эстафеты; он
состоит в следующем:
1) процесс, находящийся в критической секции, получает эс-
тафету, подтверждающую его право на выполнение критической
секции;
2) передача эстафеты происходит при достижении SIGNAL;
3) эстафета пер едае тся (недетерминированно) одному из про-
цессов, ожидающих условия (становящегося теперь истинным);
4) если нет ожидающих процессов, эстафета передается одному
из процессов, который попытается войти в критическую секцию
впоследствии.
§8 Об упрощении программы и о справедливости
стратегий планирования
Включим фрагмент SIGNAL непосредственно в текст программы
предыдущего параграфа и полученную в результате программу
несколько упр остим . В результате получается программа с теми
же свойствами, но более простую, хотя и более длинную.
1) int nr = 0, ## RW : (nr == 0 or nw == 0) and nw <= 1
2) nw = 0;
3) sem e = 1, #семафор e управляет входом в критические секции
4) r = 0, #семафор r служит для приостановки читателей
94
Страницы
- « первая
- ‹ предыдущая
- …
- 91
- 92
- 93
- 94
- 95
- …
- следующая ›
- последняя »