Автор работы: Пользователь скрыл имя, 01 Сентября 2013 в 17:25, доклад
Семафор-переменная либо массив произвольных целых неотрицательных чисел, использующихся для синхронизации вычислительных процессов.
Для работы с семафорами вводятся два примитива, традиционно обозначаемых Р и V. Пусть переменная S представляет собой семафор. Тогда действия
V(S) и P(S) определяются следующим образом.
■ V(S) — переменная S увеличивается на 1 единым действием. К переменной S нет доступа другим потокам во время выполнения этой операции.
Отчет на тему:
Использование семафоров при взаимодействии процессов.
Семафор-переменная либо массив произвольных целых неотрицательных чисел, использующихся для синхронизации вычислительных процессов.
Для работы с семафорами вводятся два примитива, традиционно обозначаемых Р и V. Пусть переменная S представляет собой семафор. Тогда действия
V(S) и P(S) определяются следующим образом.
■ V(S) — переменная S увеличивается на 1 единым действием. К переменной S нет доступа другим потокам во время выполнения этой операции.
■ Р(S) — уменьшение S на 1, если это возможно. Если S=0 и невозможно уменьшить S, оставаясь в области целых неотрицательных значений, то в этом случае поток, вызывающий операцию Р, ждет, пока это уменьшение станет возможным. Успешная проверка и уменьшение также является неделимой операцией.
Рассмотрим использование семафоров на классическом примере взаимодействия двух выполняющихся в режиме мультипрограммирования потоков, один из которых пишет данные в буферный пул, а другой считывает их из буферного пула.
Введем два семафора: е-число пустых буферов и f-число заполненных буферов, причем в исходном состоянии e=N , а f=0. Тогда работа потоков с общим буферным пулом может быть описана следующим образом(рис. 1)
Рисунок 1 Использование семафоров для синхронизации потоков.
Семафор может использоваться и в качестве блокирующей переменной. В рассмотренном примере будем считать, что запись в буфер и считывание из буфера являются критическими секциями. Взаимное исключение будем обеспечивать с помощью двоичного семафора b (рис. 2). Оба потока после проверки доступности буферов должны выполнить проверку доступности критической секции.
Рисунок 2 Использование двоичного семафора.
Таким образом, семафоры позволяют эффективно решать задачу синхронизации доступа к ресурсным пулам, таким, например, как набор идентичных в функциональном назначении внешних устройств (модемов, принтеров, портов), или набор областей памяти одинаковой величины, или набор информационных структур. Во всех этих и подобных им случаях с помощью семафоров можно организовать доступ к разделяемым ресурсам сразу нескольких потоков.
Информация о работе Использование семафоров при взаимодействии процессов