Мониторы Хоара

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

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

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

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

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

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


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: