![]() |
Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | |
|
Семафоры - это защищенная переменная, которую можно опрашивать и менять только при помощи специальных операций P и V и операции инициализации семафора.
Операция P(S) (вход взаимоисключение):
если S>0
то S:= S – 1
иначе ждать на S
Операция V(S) (выход взаимоисключение):
если есть процесс, ожидающий на S, разрешить одному продолжить работу
иначе S:= S + 1
Семафоры бывают: 1) Двоичные – 0, 1, 2)Считающие – N > 0
Их реализация бывает: 1) Аппаратная 2)Программная
Синхронизация при помощи семафоров PROGRAMM VAR S: (семафор) LOGICAL; PROCEDURE 1 BEGIN начальные операторы P(S); остальные операторы END END PROCEDURE 2 BEGIN начальные операторы V(S); остальные операторы END END BEGIN S:= 0; PARBEGIN PROCEDURE 1 PROCEDURE 2 PAREND END Пусть есть процесс, который ждет некоторого события PROCEDURE 1 и PROCEDURE 2, которая это событие фиксирует. Тогда надо использовать P и V следующим образом: | Реализация взаимоисключений при помощи семафоров. PROGRAMM VAR S: (семафор) LOGICAL; PROCEDURE 1 BEGIN WHILE TRUE DO BEGIN начальные операторы P(S); крититеская область V(S); остальные операторы END END PROCEDURE 2 [ то же самое, что и в PROCEDURE 1 ] BEGIN инициализция семафора (S,1) PARBEGIN PROCEDURE 1 PROCEDURE 2 PAREND END |
Дата публикования: 2015-02-03; Прочитано: 385 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!