我正在尝试使用 POSIX 命名信号量进行跨进程同步。我注意到在进程死亡或退出后,信号量仍然被系统打开。
在进程(打开它的)结束或退出后,是否有办法让它关闭/释放?
最佳答案
早期的讨论在这里:How do I recover a semaphore when the process that decremented it to zero crashes? .他们在那里讨论了几种可能的解决方案。
简而言之:
- 没有。如果所属进程崩溃或被信号杀死,则不会释放 POSIX 信号量。等待过程将不得不永远等待。只要您坚持使用信号量,就无法解决这个问题。
- 可以使用套接字或文件锁来实现进程间同步,进程退出时自动释放。我上面贴的题主最终选择了文件锁。参见 his answer .在评论区,他发布了一个链接到他讨论这个问题的博客。
其他可能有帮助的链接:
- Why is sem_wait() not undone when my program crashes? : 它还推荐文件锁。
- Is it possible to use mutex in multiprocessing case on Linux/UNIX ? : 他们讨论了通过在进程之间共享内存来实现同步来使用互斥量。
关于c - POSIX 名称信号量在进程退出后不释放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34756406/