Мониторы. Решение задачи Производитель-Потребитель с помощью мониторов

Монитор — конструкция языка программирования, поддерживающая управляемый доступ к разделяемым данным. Монитор инкапсулирует:

  1. Разделяемые критические данные.
  2. Функции, использующие разделяемые данные.
  3. Синхронизацию выполнения параллельных потоков, вызывающих указанную функцию.
  • Доступ к данным, располагающимся в мониторе, реализуется только из его функций.
  • Код синхронизации добавляется автоматически компилятором.

Для каждого экземпляра монитора в каждый момент времени может выполняться не более одной функции.

Conditional Variables — условные переменные, олицетворяющие наступление некоторого события.

Над CV определены следующие операции:

wait(cv) — дождаться наступления события. На время ожидания блокировка с монитора снимается.

signal(cv) — оповестить один ожидающий поток о наступлении события.

broadcast(cv) — оповестить все ожидающие потоки о наступлении события.

Решение задачи «Производители-Потребители» с помощью мониторов.

Monitor CB;

Element Buffer[n]; int start=0, end=0;

Conditional Variable NotFull, NotEmpty;

Produce(el){

if (Буфер полон) wait NotFull;

Добавить(el);

signal NotEmpty;

}

Consume(*el){

if (Буфер пуст) wait NotEmpty;

*el=Извлечь();

signal(NotFull);

}

Мониторы Хаара if (усл) wait (cv);

При вызове signal:

  1. Немедленно запускается ожидающий поток.
  2. Поток, пославший сигнал, блокируется на все время, пока выполняется поток, которого он вывел из состояния ожидания.

+ Предсказуемость.

Мониторы Меса while (усл) wait (cv);

При вызове signal:

  1. Ожидающий поток переводится в состояние «Готов к выполнению». Поток, пославший сигнал, продолжает исполнение.
  2. При освобождении монитора поток, получивший сигнал, конкурирует с другими потоками за вход в монитор на равных условиях.

+ Более эффективны (используют меньшее кол-во переменных).

+ Непосредственно поддерживают broadcast.

Если вы получили сигнал, значит, возможно, состояние монитора изменилось.




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