Linux 在系统重新启动后处理阻塞的命名信号量
在Linux框中,我使用命名信号量来控制对不同进程使用的系统资源的访问 如果系统意外崩溃,可能会发生这样的情况:信号量已被获取,但尚未返回。在这种情况下,我注意到,即使在重新启动后,信号量仍然处于锁定状态 为了克服这种情况,在一个或多个进程再次使用信号量之前,在系统启动时取消该信号量的链接是否可以?或者在释放信号量之前给它一个sem_post()会更好吗 顺便说一句: 信号量存储在何处。我想知道为什么它们能在系统重新启动后存活下来。您的第二个问题(信号量在内部存储在哪里…?)在这里得到了回答: 简而言之,命名的信号量对象存储在虚拟文件系统中。根据设计,它们可以存活到系统关闭或用机器移除为止 谷歌的一些研究表明,你看到的问题并不罕见。如果系统崩溃,如您所见,信号量将持续存在 一些人甚至提出了完全使用信号量的替代方案,这已经足够大了,例如: 至于你的第一个问题,我将画一个类似于写入文件时进程或系统崩溃(或者写入文件时内容还没有刷新到磁盘)的例子。此时该文件的状态和完整性未知 将该场景与信号量问题进行比较,我认为在系统启动时删除恶意信号量是最好的选择Linux 在系统重新启动后处理阻塞的命名信号量,linux,semaphore,Linux,Semaphore,在Linux框中,我使用命名信号量来控制对不同进程使用的系统资源的访问 如果系统意外崩溃,可能会发生这样的情况:信号量已被获取,但尚未返回。在这种情况下,我注意到,即使在重新启动后,信号量仍然处于锁定状态 为了克服这种情况,在一个或多个进程再次使用信号量之前,在系统启动时取消该信号量的链接是否可以?或者在释放信号量之前给它一个sem_post()会更好吗 顺便说一句: 信号量存储在何处。我想知道为什么它们能在系统重新启动后存活下来。您的第二个问题(信号量在内部存储在哪里…?)在这里得到了回答: