我有两个程序通过共享内存段进行交互。使用段进行读取或写入时,它们会锁定。
如果他们中的任何一个在关键部分崩溃(通常会被杀 - 可能还有一些无法解决的东西),我希望他们释放锁定,以便shmem不会被完全锁定。
其他问题指出了Windows,Java等方面的答案,但你如何在Unix(特别是Linux)中做到这一点?
(我没有附加到pthreads互斥函数; SysV信号量或其他任何东西都可以。)
答案 0 :(得分:8)
我相信您正在寻找POSIX强大的互斥锁:
http://www.opengroup.org/onlinepubs/9699919799/functions/pthread_mutexattr_getrobust.html
答案 1 :(得分:2)
我认为这是设计上的。如果其中一个进程崩溃,则可能是被锁定的关键部分被中断,并且存储在该共享内存段中的数据不一致,无效或不安全。访问内存并进行操作,就好像其他进程没有发生任何事情一样可能会使其崩溃或更糟,具体取决于它的作用。
答案 2 :(得分:0)
System V信号量支持SEM_UNDO
选项来完成此操作。但是,与强健的互斥锁不同,这不会通知下一个线程获取锁。从好的方面来说,它们比强大的互斥体更便携。