增强进程间争用条件预防

boost interprocess race condition prevention

本文关键字:争用条件 进程 增强      更新时间:2023-10-16

我在使用偶尔偶尔抛出以下异常的代码时遇到了一些问题:

boost interprocess: no such file or directory

有多个代码访问同一组文件,但某些代码会将文件实时移动到不同的目录。处理和移动文件的代码使用文件锁,例如

boost::interprocess::file_lock

代码中发生的过程如下:1) 程序 1 检查它要锁定的文件是否存在2)如果上述检查通过,则使用file_lock锁定文件

我认为,问题在于,在步骤 1 和 2 之间,程序 2 可以在程序 1 正在处理的文件上使用 boost::filesystem::rename 并移动它。

如果两个程序同时运行,有什么方法可以防止这种情况发生?

锁定

前不要检查文件是否存在。相反,只需尝试锁定它;如果文件不存在,Boost 将抛出一个interprocess_exception,提醒您文件已锁定。