ВОТ ЗДЕСЬ ЕЩЕ КАКОЙ-ТО ТЕКСТИК БЫЛ, НАЙТИ

start — эл-т, который нужно потребить. Изменяется только потребителем.

end — указатель на первую пустую ячейку. Изменяется только производителем.

 

При пустом и полном буфере start==end, нужно как-то отличить эти две ситуации.

  1. Флажок: 0 — буфер пуст, 1 — полон.
  2. Пуст — start=end=-1.

Появляется переменная, изменяемая обоими потоками.

 

Решение на семафорах:

Semaphore Full=0, Empty=N, Access=1;

Produce(el) {

P(Empty);

P(Access);

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

V(Access);

V(Full);

}

 

Consume (*el) {

P(Full);

P(Access);

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

V(Access);

V(Empty);

}

 

Недостаток семафоров и мьютексов в том, что их связь, защищаемая критическими ресурсами, установлена только в голове программиста. Соответственно, ОС не может автоматически контролировать использование семафоров и мьютексов.