【问题标题】:Is it possible to use System V shared memory with POSIX semaphores?是否可以将 System V 共享内存与 POSIX 信号量一起使用?
【发布时间】:2015-09-30 03:05:44
【问题描述】:

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

【问题讨论】:

    标签: posix semaphore shared-memory


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-21
      • 1970-01-01
      • 1970-01-01
      • 2023-04-11
      • 2010-10-26
      • 1970-01-01
      • 2014-10-08
      • 2011-01-09
      相关资源
      最近更新 更多