使用 flock
的 C 文件锁定通常用于实现跨平台协作进程间锁定/互斥锁。
我有一个运行良好的实现(mac/linux/win),但它对文件删除不稳健(至少在 Linux 下)。
一个或多个进程已开始创建和使用锁定文件 (/tmp/lockfile
) 并与其协作互锁共享资源。
一段时间后,我手动删除了锁定文件 (rm/tmp/lockfile
)。正在运行的进程继续相互协作,但是任何想要开始使用相同资源锁和锁文件的新进程都会破坏整个互斥锁逻辑。它将创建一个新版本的 /tmp/lockfile
,它与已经在运行的进程中使用的版本有所不同。
如何防止锁文件在任何进程打开时被取消链接? 还可以使用哪些其他解决方案?
我不能使用信号量,因为我需要锁在拥有进程崩溃时自行释放。
最佳答案
您确实可以使用信号量。 Linux 提供标志 SEM_UNDO
,它将在进程终止时撤消信号量操作(参见 semop
(2))。
关于c/c++ flock 在 linux 上作为互斥体对文件删除不稳健,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34313774/