Я пишу программу, которая имитирует проблему «читателей-писателей». Почему, когда я запускаю программу, например, с 10 читателями и 10 писателями, в читальный зал входит только 1 читатель. Где моя ошибка?
int READERS;
int READERS_WORKING = 0;
int WRITERS;
int WRITERS_WORKING = 0;
sem_t resource, reader;
void PrintStatus(){
printf("Outside: %d readers and %d writers, Inside: %d readers and %d writers\n", (READERS-READERS_WORKING), (WRITERS-WRITERS_WORKING), READERS_WORKING, WRITERS_WORKING);
}
void *readersWork(void *arg) {
while (1) {
sem_wait(&reader);
READERS_WORKING++;
if (READERS_WORKING == 1) {
sem_wait(&resource);
}
PrintStatus();
sem_post(&reader);
sleep(2); //Working
sem_wait(&reader);
READERS_WORKING--;
if (READERS_WORKING == 0) { // Last reader inside
sem_post(&resource);
}
sem_post(&reader);
PrintStatus();
}
return 0;
}
void *writersWork(void *arg) {
while (1) {
sem_wait(&resource);
PrintStatus();
WRITERS_WORKING++;
sleep(2);
sem_post(&resource);
WRITERS_WORKING--;
//PrintStatus();
}
return 0;
}