我有两个使用System V共享内存进行通信的程序。
两个程序都可以正常工作,但我想添加命名信号量以避免竞争条件。
我尝试了以下内容:
sem_t *sem = sem_open("/semaphorename", O_CREAT | O_EXCL, S_IRUSR | S_IWUSR, 0);
if(sem == SEM_FAILED){
sem = sem_open("/semaphorename", 0);
}
while(1){
/*get input from user */
sem_wait(sem);
/* write to shared memory. If QUIT is entered, break from while loop */
sem_post(sem);
}
sem_close(sem);
sem_unlink("/semaphorename");
没有信号量,程序可以工作,但是对于它们,没有任何内容写入共享内存。我做错了什么,甚至可以在使用System V共享内存时使用这些信号量?
答案 0 :(得分:2)
由于信号量的初始值为0,sem_wait()
将永远等待,直到有人sem_post()
为止。因此,只在一个程序中使用单个sem_post()
初始化信号量。