信号量仅通过一个过程即可获取

时间:2019-05-09 16:58:31

标签: c semaphore

我正在尝试为POSIX标准重构我的C代码。显然我陷入了僵局,归结为这个简单的代码。信号量应该在两个进程之间共享,但是不幸的是,它由创建它的进程所拥有。

创建者

sem_t * mutex;

  if ((mutex = sem_open (key_trucker, O_CREAT, 0644, 1)) == SEM_FAILED) {
       perror ("sem_open"); exit (1);
    }

    int val;
    sem_getvalue(mutex,&val);

    if(val == 0 ){
      sem_post(mutex);
    }

  time_t currtime;
  while(1){
    sem_wait(mutex);
    time(&currtime);
    sleep(1);
    printf("%s",ctime(&currtime) );
    sem_post(mutex);
  }

共享信号量的过程

sem_t * mutex;

  if ((mutex = sem_open (key_trucker, 0 )) == SEM_FAILED) {
       perror ("sem_open"); exit (1);
        }

  time_t currtime;
  while(1){
    sem_wait(mutex);
    time(&currtime);
    printf("%s",ctime(&currtime) );
    sleep(1);
    sem_post(mutex);
  }

1 个答案:

答案 0 :(得分:0)

要在进程之间共享的信号量必须是“命名”信号量。这样的名称以“ \”开头。信号量最终也需要销毁,否则,第二次进程调用sem_open()时它将失败,并将'errno'设置为EXIST(或类似名称),因此代码也需要(在注意到呼叫失败)以检查errno

的值