Теория распараллеливания и синхронизация. Демьянович Ю.К - 93 стр.

UptoLike

Инвариант 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