Читатели и писатели-писатели голодали - PullRequest
0 голосов
/ 05 июня 2019

Я пишу программу, которая имитирует проблему «читателей-писателей». Почему, когда я запускаю программу, например, с 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...