进程终止时sem_close vs sem_unlink

时间:2012-03-02 16:44:56

标签: semaphore

我有多个进程使用信号量进行通信。

sem_open("\name",O_CREATE,S_IRWXU|S_IRWXG,10);

我有两个问题w.r.t跟随:

  1. 现在,当一个进程突然死亡而不调用sem_close或sem_unlink时。剩下的流程会发生什么?

  2. 如果调用sem_close(),则不会为1进程调用sem_unlink()。所有其他进程,调用sem_close()和sem_unlink()。在所有进程退出后,信号量是否仍然存在?

1 个答案:

答案 0 :(得分:5)

回答你的问题:

  1. 当进程自动或非自愿地死亡时,sem_close操作自动发生。
  2. 不,如果所有进程都已退出且信号量已打开并且至少有一个进程调用了sem_unlink,则信号量不存在。
  3. 扩展一下: sem_unlink删除命名的信号量,并且一旦其引用计数为0就会破坏信号量。这是在打开它的所有进程调用sem_close或已退出之后。

    参考文献:书 - Unix网络编程 - W.Richard Stevens的进程间通信,第2卷,第10页