Задача «Читатели-Писатели».
Имеются данные и два типа потоков — писатели и читатели.
- При выполнении записи доступ другим потокам запрещен.
- При выполнении чтения доступ писателям запрещен, читателям — разрешен.
- Потоки выполняются параллельно.
Решение на семафорах (CS выделены цветом):
Semaphore Access=1, RC=1; // Двоичные.
int RCount=0; // Кол-во читателей, выполняющих чтение в данный момент.
Write() {
P(Access);
writeOp();
V(Access);
}
Read() {
P(RC);
RCount++;
if (RCount == 1) P(Access); // Первый Ч захватывает данные для всех Ч.
V(RC);
ReadOp();
P(RC);
RCount--;
if(RCount == 0) V(Access);
V(RC);
}
Задача «Производители-Потребители».
Кольцевой буфер.