Класическая задача синхронизации. Есть общий ресурс, из которого можно читать и писать, есть читатели и есть писатели... Чтение может происходить несколькими нитями одновременно. Когда какая-то из нитей производит запись, остальные нити не должны иметь доступа к ресурсу.
Только небольшая нароботка, но она не работает. Скажите, пожалуйста, в чем ошибка?
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/sem.h>
#include <sys/wait.h>
//#include <signal.h>
int readcount = 0, writecount;
semaphore x = 1, y=1, z=1, rsem = 1, wsem = 1;
void reader()
{
while(true)
{
wait(z);
wait(rsem);
wait(x);
readcount++;
if (readcount==1) wait(wsem);
signal(x);
signal(rsem);
signal(z);
READUNIT();
wait(x);
readcount--;
if (readcount==0) signal(wsem);
signal (x);
}
}
void writer()
{
while(true)
{
wait(y);
writecount++;
if (writecount==1) wait(rsem);
signal(y);
wait(wsem);
WRITEUNITO;
signal(wsem);
wait(y);
writecount--;
if (writecount==0) signal(rsem);
signal(y);
}
}
void main ()
{
readcount = writecount = 0;
parbegin(reader, writer);
}