Проблема переполненного буфера (проблема производителя и потребителя)

Рассмотрим два процесса, которые совместно используют буфер ограниченного размера, один процесс пишет в буфер, другой считывает данные.

Чтобы первый процесс не писал, когда буфер полный, а второй не считывал, когда он пуст, вводится переменная count для подсчета количества элементов в буфере.

 

 

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

Алгоритм такой ситуации:

1. ПроцессВ, считал count=0 (заблокироваться он еще не успел)

2. Планировщик передал управление процессу А

3. ПроцессА, выполнил все вплоть до wakeup, пытаясь разблокировать процесс В(но он не заблокирован, wakeup срабатывает впустую)

4. Планировщик передал управление процессу В

5. И он заблокировался, и больше сигнала на разблокировку не получит

6. процессАв конце концов заполнит буфер и заблокируется, но сигнала на разблокировку не получит.