В школе задали написать упражнение в котором есть доступ к общему
ресурсу (через shmget и т.п.) X писателей и Y читателей которые в
бесконечных циклах делают sleep и пишут/читают.
При этом заданы такие условия: писатель в данный момент может писать
только один (что логично), а читателей читать может сколько угодно, но
не тогда когда кто-нибудь пишет.
И если с писателями все просто:
struct sembuf sb[2];
sb[0].sem_num = 0;
sb[0].sem_op = -1;
sb[0].sem_flg = SEM_UNDO;
sb[1].sem_num = 1;
sb[1].sem_op = 1;
.....
for (i = 0; ; ++i) {
....
semop(sem_id, &sb[0], 1);
strcpy((char*) data, buf);
semop(sem_id, &sb[1], 1);
}
То с читателями я что-то зашел в какой-то тупик. Читатели могут
читать одновременно, так что вроде бы при помощи semctl можно
было бы проверить нет ли в данный момент писателя и висеть,
но этого явно недостаточно:
а) что если сразу после semctl нарисуется писатель?
б) писатель не должен входить в критическую секцию
пока там кто-то читает
Напрашивается еще один семафор, но как сделать так чтобы
читатели могли входить в довольном количестве пока
не войдет писатель?
Что-то я запутался совсем... RFH (Request For Help!)

Ответ на:
комментарий
от cvv

Ответ на:
комментарий
от dissident

Ответ на:
комментарий
от Legioner
Ответ на:
комментарий
от Die-Hard

Ответ на:
комментарий
от dissident

Ответ на:
комментарий
от dissident

Ответ на:
комментарий
от dissident
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
Похожие темы
- Форум Семафоры (2005)
- Форум Вопрос по семафорам (2002)
- Форум семафоры (2006)
- Форум семафоры (2005)
- Форум Семафоры (2003)
- Форум Распределенный семафор (2013)
- Форум Семафоры POSIX (2001)
- Форум POSIX семафоры (2001)
- Форум Число семафоров (2000)
- Форум SystemV семафоры (2006)