Читатели-писатели, использующие только семафоры - нет общей переменной между читателями - PullRequest
1 голос
/ 20 июня 2020

У меня, я думаю, небольшая проблема с читателями писателями [1]. Мне нужно использовать семафоры для этой задачи, и я не могу использовать общие переменные между читателями.

У меня есть Writer:

    sem_t  *write;
    write = sem_open("/write", O_CREAT, 0600, 1);
​
    do{
        sem_wait(write); 
        printf("Critical section in writer\n");
        sem_post(write);
​
    }while(1);
​
    return 0;
}

и Reader:

​
int main(){
    sem_t *mutex;
    sem_t *write;
    int count=0;
    mutex = sem_open("/mutex", O_CREAT, 0600, 5);
    write = sem_open("/write", O_CREAT, 0600, 1);
​
    do{
        sem_wait(mutex);
        count++;
        if (count==1){
            sem_wait(write);
        }
        sem_post(mutex);
​
        printf("Critical section in readers\n");
​
        sem_wait(mutex);
        count--;
        if(count==0)
            sem_post(write);
        sem_post(mutex); 
​
    }while(1);

Мой учитель сказал мне использовать этот шаблон для его решения:

Reader:
 P(Sw)
 P(Sr)
 V(Sw)
 #read
 V(Sr)

Writer:
  P(Sw)
  for i in 1..N: P(Sr)
  # writing
  for i in 1..N: V(Sr)
  V(Sw)

Может ли кто-нибудь помочь мне понять, почему я не могу использовать переменную count, поскольку мне сказали, что она используется читателями, помогите мне понять идея, предложенная учителем, и способы ее реализации. Спасибо!

[1] Проблема читателей-писателей: комната рассчитана на n читателей, читатели заходят в комнату, занимают там место и через некоторое время уходят. Если комната пуста, писатель может попасть внутрь, но только один писатель может находиться в комнате одновременно. Задача: обеспечить реализацию 2-х программ, реализующих задачу читателей-писателей, чтобы можно было динамически запускать новые процессы с соблюдением ограничений

...