Задача «Читатели-Писатели»

Имеются данные и два типа потоков — писатели и читатели.

  1. При выполнении записи доступ другим потокам запрещен.
  2. При выполнении чтения доступ писателям запрещен, читателям — разрешен.
  3. Потоки выполняются параллельно.

Решение на семафорах (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);

}

Задача «Производители-Потребители».

Кольцевой буфер.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



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