首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >进程终止时sem_close与sem_unlink的比较

进程终止时sem_close与sem_unlink的比较
EN

Stack Overflow用户
提问于 2012-03-02 16:44:56
回答 2查看 5.4K关注 0票数 5

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

代码语言:javascript
复制
sem_open("\name",O_CREATE,S_IRWXU|S_IRWXG,10);

我有以下两个问题:

现在是

  1. ,当一个进程突然死亡而没有调用sem_close或sem_unlink时。如果调用了

(),那么其余的进程怎么办?如果调用sem_close(),那么对一个进程不调用sem_unlink()。所有其他进程,调用sem_close()和sem_unlink()。在所有进程退出之后,信号量是否仍然存在?

EN

回答 2

Stack Overflow用户

发布于 2014-02-22 23:26:03

在回答你的问题时:

  1. 当进程自动或非自愿地死亡时,sem_close操作将自动发生。
  2. No,如果所有进程都已退出,并且至少有一个进程名为sem_unlink,则信号量不存在。

进行位展开: sem_unlink移除命名的信号量,并在其引用计数为0时将销毁该信号量。毕竟,打开它的进程已经调用了sem_close或已退出。

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

票数 8
EN

Stack Overflow用户

发布于 2022-04-11 13:00:03

尽管如此,我发现在另一个答案中遗漏了这个信息:

  • sem_close与信号量相关联,它的计数sem_opens)

  • 信号量在被称为
  • 时会减少,即使计数下降到零,信号量仍然保持存活,
  • ,另一个进程可以使用相同的名称,将计数恢复到1 (或者在后续的sem_opens)

中更大)。

  • sem_unlink与信号量的名称相关联,在调用时不再使用
    • 名称;名称是relinquished
    • Semaphores,仍然是打开的(即没有sem_close调用),直到ref为止。当计数降至零时,一个未链接的信号量被销毁,如果进程semaphore

具有相同的、现在不喜欢的名称,它将得到一个全新的(不同的)

虽然与名称相关联的信号量是sem_closed,但信号量和名称在sem_unlinked之前一直保持不变。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9537068

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档