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

Is it possible to use System V shared memory with POSIX semaphores?

我有两个程序使用 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,sem_wait() 将永远等待,直到有人 sem_post()。因此,仅在其中一个程序中使用单个 sem_post() 初始化信号量。