Переменная-условие (condition variable) вводится для каждой причины, по которой процесс может быть переведен в состояние ожидания. Заметим, что эти переменные совершенно не похожи на обычные переменные, с которыми мы привыкли иметь дело. Когда определяется переменная-условие, заводится очередь. Процесс, выдавший команду ожидания, включается в эту очередь, а процесс, выдавший команду сигнализации, тем самым позволяет ожидающему процессу выйти из очереди и войти в монитор (обслуживание очереди может, например, осуществляться с использованием дисциплины FIFO).
Использование монитора в качестве основного средства синхронизации и связи освобождает процессы от необходимости явно разделять между собой информацию. Доступ же к разделяемым переменным всегда ограничен телом монитора. Т.к. мониторы входят в ядро ОС, то разделяемые переменные становятся системными. Это автоматически исключает критические интервалы,
Монитор — это пассивный объект, а не процесс, монитор оживает только тогда, когда какой-либо процесс допускается воспользоваться его услугами. Семантика монитора гарантирует, что если хотя бы один процесс ожидает выполнения условия, то никакой другой обратившийся процесс не может вмешаться между сигналом о выполнении этого условия и продолжением ровно одного из ожидающих процессов. Хотя по сравнению с семафорами, мониторы не представляют собой более мощного инструмента синхронизации, у них есть некоторые преимущества:
1) Доступ к разделяемым переменным всегда ограничен телом монитора, что автоматически исключает критические участки (т.к. в каждый момент монитором может пользоваться только один процесс, а два процесса никогда не могут получить доступ к разделяемым переменным одновременно).
2) Мониторы очень гибки, в форме мониторов можно реализовать не только рассмотренный нами семафор, но и многие другие синхронизирующие операции.
3) Мониторы дают процессам возможность совместно использовать программные модули, представляющие собой критические секции (т.к. если несколько процессов совместно используют ресурс и работают с ним совершенно одинаково, то в мониторе нужна только одна процедура, тогда как при использовании семафоров нужно, чтобы в каждом процессе имелся собственный экземпляр критической секции).
Таким образом, мониторы обеспечивают по сравнению с семафорами значительное упрощение организации взаимодействующих вычислительных процессов и большую наглядность при незначительной потере эффективности.
Wait(переменная-условие) Signal(переменная-условие)
05 Мар, 2009
