我刚开始在Linux上使用POSIX信号量。 (我在其他操作系统中使用了类似的结构)。我的问题更多是关于如果我杀死我的应用程序如何管理信号量(因为他们或其他东西在我学习曲线上升时行为不端)
例如:
- 我启动应用程序,它创建信号量,信号量按预期工作。
- 其他东西不起作用,所以我杀死了应用程序(CTRL-C)。
- 当我重新启动应用程序时,信号量部分不再有效。我得到一个EACCES错误,或EEXIST错误(取决于我是否使用O_EXCL sem_open)。
我可以去/ dev / shm看到信号量仍在那里。如果我手动删除这些,应用程序将再次运行。
有没有更好的方法来管理它?例如,当应用程序启动时,如果信号量存在,则可以重置并重新使用,或者删除并重新创建。这是“拥有”信号量的应用程序,最终我不希望它依赖外部操作来工作。
谢谢!任何建议。
编辑:一个相关的问题:我会将这些用于进程间通信。如果重新启动信号量的“所有者进程”,它可能会尝试通过sem_close然后sem_open重置。但是,如果另一个进程已经拥有信号量,则此处存在问题。在这种情况下,sem_destroy的行为是未定义的。也许我需要考虑信号量以外的东西......