Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 读写器只使用信号量-读写器之间没有共享变量_C_Unix_Concurrency_Synchronization_Semaphore - Fatal编程技术网

C 读写器只使用信号量-读写器之间没有共享变量

C 读写器只使用信号量-读写器之间没有共享变量,c,unix,concurrency,synchronization,semaphore,C,Unix,Concurrency,Synchronization,Semaphore,我想读者和作者之间有个小问题。我需要为该任务使用信号量,不能在读卡器之间使用共享变量 我有一位作家: 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); ​

我想读者和作者之间有个小问题。我需要为该任务使用信号量,不能在读卡器之间使用共享变量

我有一位作家:

    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;
}
读者:

​
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个读者,读者来到房间,在那里占据一个空间,一段时间后离开。如果房间是空的,作者可以进入房间,但同一时间只能有一个作者在房间里。任务:提供实现读写器问题的两个程序的实现,以便在遵守限制的同时动态启动新流程

“有人能帮助我理解为什么我不能使用变量
计数
,因为我被告知它是在读写器之间共享的”-你不能使用共享变量,因为这是对你的任务的约束。我们不知道你的任务为什么会有这样的限制,不如问问你的老师。“帮助我理解老师提供的想法以及如何实施。”-在模式中
P
表示
sem\u wait
V
表示
sem\u post
。您只需要编写代码。有什么不清楚的地方吗?“有人能帮我理解为什么我不能使用变量
count
,因为我被告知它是在读者之间共享的”-你不能使用共享变量,因为它是你任务的约束。我们不知道你的任务为什么会有这样的限制,不如问问你的老师。“帮助我理解老师提供的想法以及如何实施。”-在模式中
P
表示
sem\u wait
V
表示
sem\u post
。您只需要编写代码。这里面有什么不清楚的?