在Unix中崩溃时自动释放互斥锁

时间:2010-11-10 21:30:07

标签: c linux unix pthreads mutex

我有两个程序通过共享内存段进行交互。使用段进行读取或写入时,它们会锁定。

如果他们中的任何一个在关键部分崩溃(通常会被杀 - 可能还有一些无法解决的东西),我希望他们释放锁定,以便shmem不会被完全锁定。

其他问题指出了Windows,Java等方面的答案,但你如何在Unix(特别是Linux)中做到这一点?

(我没有附加到pthreads互斥函数; SysV信号量或其他任何东西都可以。)

3 个答案:

答案 0 :(得分:8)

答案 1 :(得分:2)

我认为这是设计上的。如果其中一个进程崩溃,则可能是被锁定的关键部分被中断,并且存储在该共享内存段中的数据不一致,无效或不安全。访问内存并进行操作,就好像其他进程没有发生任何事情一样可能会使其崩溃或更糟,具体取决于它的作用。

答案 2 :(得分:0)

System V信号量支持SEM_UNDO选项来完成此操作。但是,与强健的互斥锁不同,这不会通知下一个线程获取锁。从好的方面来说,它们比强大的互斥体更便携。