Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 在系统重新启动后处理阻塞的命名信号量_Linux_Semaphore - Fatal编程技术网

Linux 在系统重新启动后处理阻塞的命名信号量

Linux 在系统重新启动后处理阻塞的命名信号量,linux,semaphore,Linux,Semaphore,在Linux框中,我使用命名信号量来控制对不同进程使用的系统资源的访问 如果系统意外崩溃,可能会发生这样的情况:信号量已被获取,但尚未返回。在这种情况下,我注意到,即使在重新启动后,信号量仍然处于锁定状态 为了克服这种情况,在一个或多个进程再次使用信号量之前,在系统启动时取消该信号量的链接是否可以?或者在释放信号量之前给它一个sem_post()会更好吗 顺便说一句: 信号量存储在何处。我想知道为什么它们能在系统重新启动后存活下来。您的第二个问题(信号量在内部存储在哪里…?)在这里得到了回答:

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

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

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

顺便说一句:

信号量存储在何处。我想知道为什么它们能在系统重新启动后存活下来。

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

简而言之,命名的信号量对象存储在虚拟文件系统中。根据设计,它们可以存活到系统关闭或用机器移除为止

谷歌的一些研究表明,你看到的问题并不罕见。如果系统崩溃,如您所见,信号量将持续存在

一些人甚至提出了完全使用信号量的替代方案,这已经足够大了,例如:

至于你的第一个问题,我将画一个类似于写入文件时进程或系统崩溃(或者写入文件时内容还没有刷新到磁盘)的例子。此时该文件的状态和完整性未知

将该场景与信号量问题进行比较,我认为在系统启动时删除恶意信号量是最好的选择