c/c++ flock 在 linux 上作为互斥体对文件删除不稳健

标签 c linux

使用 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/

相关文章:

c - Y 不递增

c - 在 main 中定义和初始化 flask 变量

c - 在 ubuntu 上编译 C 代码时遇到问题。 (#include 错误)

php - 使用wget向php发送数据

python - 如何不使用pip将软件包安装到anaconda

c - dcgettext 的目的是什么?

c++ - 错误 C2440 : '='  : cannot convert from 'char *(__cdecl *)(int,int)' to en 'GetItemText_t'

c++ - 尝试使用 time.h 库计算两个日期之间的差异

c++ - 为什么此 WinSock 代码无法连接到客户端?

linux - bgzip 目录中的所有 VCF 文件?