В школе задали написать упражнение в котором есть доступ к общему ресурсу (через 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)
- Форум семафоры (2005)
- Форум семафоры (2006)
- Форум Семафоры (2003)
- Форум Распределенный семафор (2013)
- Форум SystemV семафоры (2006)
- Форум POSIX семафор (2004)
- Форум Семафоры POSIX (2001)
- Форум POSIX семафоры (2001)