В школе задали написать упражнение в котором есть доступ к общему ресурсу (через 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!)