Использование семафоров при взаимодействии процессов

Автор работы: Пользователь скрыл имя, 01 Сентября 2013 в 17:25, доклад

Краткое описание

Семафор-переменная либо массив произвольных целых неотрицательных чисел, использующихся для синхронизации вычислительных процессов.
Для работы с семафорами вводятся два примитива, традиционно обозначаемых Р и V. Пусть переменная S представляет собой семафор. Тогда действия
V(S) и P(S) определяются следующим образом.
■ V(S) — переменная S увеличивается на 1 единым действием. К переменной S нет доступа другим потокам во время выполнения этой операции.

Вложенные файлы: 1 файл

Отчет(семафоры).docx

— 702.32 Кб (Скачать файл)

Отчет на тему:

Использование семафоров при взаимодействии процессов.

 

 

Семафор-переменная либо массив произвольных целых неотрицательных чисел, использующихся для синхронизации вычислительных процессов.

Для работы с семафорами вводятся два примитива, традиционно обозначаемых Р и 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 Использование двоичного семафора.

Таким образом, семафоры позволяют эффективно решать задачу синхронизации  доступа  к  ресурсным  пулам,  таким,  например,  как  набор  идентичных в  функциональном  назначении  внешних устройств  (модемов,  принтеров,  портов), или набор  областей памяти одинаковой величины, или набор информационных  структур.  Во  всех  этих  и подобных  им  случаях  с  помощью  семафоров  можно организовать доступ к разделяемым  ресурсам сразу нескольких потоков.

 


Информация о работе Использование семафоров при взаимодействии процессов