Студопедия  
Главная страница | Контакты | Случайная страница

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Signal(переменная-условие)

 

Банк покупает «дебиторские счета» предприятия за наличные, а затем взыскивает долг с фактического покупателя, которому ассоциация продала товар или оказала услугу.

 

Лекция 7

 

Глава 6. Синхронизация параллельных процессов на высоком

уровне

Мониторы

Рассмотренные нами в предыдущей главе средства реализации примитивов взаимоисключения элементарны, а решение с их помощью достаточно сложных проблем параллельных вычислений затруднительно. Средства синхронизации параллельных процессов более высокого уровня были первоначально предложены в работах Дейкстра и Хоара.

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

Вход в монитор находится под жестким контролем - здесь осуществляется взаимоисключение процессов, так что в каждый момент времени только одному процессу разрешается войти в монитор. Процессам, которые хотят войти в монитор, когда он уже занят, приходится ждать, причем режимом ожидания управляет сам монитор.

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

Команды Wait () и Signal ().

Если процесс обращается к некоторой процедуре монитора, но соответствующий ресурс занят, эта процедура выдает команду ожидания Wait.Когда монитор блокирует процесс с помощью команды Wait,он должен указать условие, при которомпроцесс может возобновить свою работу. Когда это условие будет выполнено, монитор выработает команду оповещения Signal,объявляющую о том, что данный ресурс освободился. Если какие-либо процессы ожидают выполнения этого условия, то один из них пробуждается и получает разрешение продолжить работу. Учитывая выше сказанное, команды ожидания и оповещения могут быть записаны следующим образом:

 

Wait(переменная-условие)

Signal(переменная-условие)

Переменная-условие (condition variable) вводится для каждой причины, по которой процесс может быть переведен в состояние ожидания. Заметим, что эти переменные совершеннно не похожи на обычные переменные, с которыми мы привыкли иметь дело. Когда определяется переменная-условие, заводится очередь. Процесс, выдавший команду ожидания, включается в эту очередь, а процесс, выдавший команду сигнализации, тем самым позволяет ожидающему процессу выйти из очереди и войти в монитор (обслуживание очереди может, например, осуществляться с использованием дисциплины FIFO).

 


Дата добавления: 2015-01-07; просмотров: 7 | Нарушение авторских прав




lektsii.net - Лекции.Нет - 2014-2019 год. (0.011 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав