我有多个进程使用信号量进行通信。
sem_open("\name",O_CREATE,S_IRWXU|S_IRWXG,10);我有以下两个问题:
现在是
(),那么其余的进程怎么办?如果调用sem_close(),那么对一个进程不调用sem_unlink()。所有其他进程,调用sem_close()和sem_unlink()。在所有进程退出之后,信号量是否仍然存在?
发布于 2014-02-22 23:26:03
在回答你的问题时:
进行位展开: sem_unlink移除命名的信号量,并在其引用计数为0时将销毁该信号量。毕竟,打开它的进程已经调用了sem_close或已退出。
参考文献:图书- Unix网络编程- W.Richard Stevens的进程间通信,第2卷,ch10
发布于 2022-04-11 13:00:03
尽管如此,我发现在另一个答案中遗漏了这个信息:
sem_close与信号量相关联,它的计数sem_opens)
1 (或者在后续的sem_opens)中更大)。
sem_unlink与信号量的名称相关联,在调用时不再使用sem_close调用),直到ref为止。当计数降至零时,一个未链接的信号量被销毁,如果进程semaphore具有相同的、现在不喜欢的名称,它将得到一个全新的(不同的)
虽然与名称相关联的信号量是sem_closed,但信号量和名称在sem_unlinked之前一直保持不变。
https://stackoverflow.com/questions/9537068
复制相似问题