(Не могу ручаться за ответы. Не сдавала Наталье Юрьевне)
- Основное свойство набора семафоров? Одной неделимой командой можно изменить состояние всего набора семафоров или части набора.
- Когда могут блокироваться процессы? На семафоре, когда активен другой процесс
- Что дает проверка семафора на 0 (или NULL)?! Ожидание освобождения семафора без попытки захвата.
-
В каком режиме работают писатели?
В режиме монопольного доступа к разделяемой переменной -
Что за структуру создали?
Структура описывает действия, которые мы будем производить с нашими процессами (с набором семафоров). Первое значение в тройке является ИНДЕКСОМ, второе действием, третье флагом (если стоит 0, значит флаг отсутствует) -
Зачем нужен массив структур?
Чтобы производить неделимую операцию над набором семафоров. -
На чем могут быть блокированы читатели/писатели
-
Чем обусловлено потерянное обновление?
Потерянное обновление - это когда несколько писетелей подряд записали данные. (читатель не прочитал обновленные данные).
Все ок:- writer: a = 1
- reader: a = 1
- writer: a = 2
Есть потерянное обновление:
- reader: a = 2
- writer: a = 1
- writer: a = 2
- reader: a = 2
-
Потерянное обновление обусловлено особенностью алгоритма. При выходе из писателя писатель проверяет, нет ли у нас ждущих писателей,
- если нет таковых, то выдается разрешение на чтение,
- если есть ждущие писатели, то писатели пишут до тех пор пока не освободится очередиь писателей. (читатели в это время не могут читать)
-
Что тогда делается с бесконечным откладыванием?
- На чем может быть блокирован потребитель? На бинарном семафоре и на семафоре потребителей
- На чем может быть блокирован производитель/потребитель?
- Зачем нужен каждый конкретный семафор?
- бинарный для предотвращения одновременного доступа производителя и потребителя,
- производства: для блокировки производителя при заполнении буфера,
- потребителя: для блокировки потребителя при пустом буфере.