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
。您只需要编写代码。这里面有什么不清楚的?