是否可以将 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()
初始化信号量。
我有两个程序使用 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()
初始化信号量。