Класическая задача синхронизации. Есть общий ресурс, из которого можно читать и писать, есть читатели и есть писатели... Чтение может происходить несколькими нитями одновременно. Когда какая-то из нитей производит запись, остальные нити не должны иметь доступа к ресурсу.
Только небольшая нароботка, но она не работает. Скажите, пожалуйста, в чем ошибка?
#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);
 }


