是否可以将System V共享内存与POSIX信号量一起使用?

时间:2015-07-11 10:59:18

标签: posix semaphore shared-memory

我有两个使用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共享内存时使用这些信号量?

1 个答案:

答案 0 :(得分:2)

由于信号量的初始值为0,sem_wait()将永远等待,直到有人sem_post()为止。因此,只在一个程序中使用单个sem_post()初始化信号量。