gpt4 book ai didi

linux - 系统重启后处理阻塞的命名信号量

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:07:37 25 4
gpt4 key购买 nike

在 Linux Box 中,我使用命名信号量来控制对不同进程使用的系统资源的访问。

如果系统意外崩溃,可能会发生信号量已获取但尚未归还的情况。在这种情况下,我注意到,即使在重新启动后,信号量仍处于锁定状态。

要克服这种情况,是否可以在系统启动时取消链接信号量,然后再由一个或多个进程使用?或者在信号量被释放之前给它一个 sem_post() 会更好吗?

顺便说一句:

信号量在内部存储在哪里。我想知道为什么它们在系统重启后仍然存在。

最佳答案

您的第二个问题(信号量内部存储在哪里...?)在这里得到回答:sem_overview(7)

简而言之,命名信号量对象存储在虚拟文件系统中。按照设计,它们会一直存在,直到系统关闭或使用 sem_unlink(3) 删除它们。 .

一些 Google 研究表明您遇到的问题并不少见。如果系统崩溃,信号量将如您所见持续存在。

一些人甚至想出了完全使用信号量的替代方案,这已经是一个问题了,例如:How do I recover a semaphore when the process that decremented it to zero crashes?

关于您的第一个问题,我想将其与写入文件并在这样做时进程或系统崩溃(或者已经写入文件但内容尚未刷新到磁盘)进行比较。该文件的状态和完整性此时是未知的。

将这种情况与您的信号量问题进行比较,我相信在系统启动时删除流氓信号量是您最好的选择。

关于linux - 系统重启后处理阻塞的命名信号量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43387264/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com