促进进程间竞争条件的预防

时间:2012-06-26 18:41:33

标签: c++ boost locking race-condition interprocess

我遇到了一些代码的问题,偶尔会偶尔抛出以下异常:

boost interprocess: no such file or directory

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

boost::interprocess::file_lock

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

锁定文件

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

如果两个程序同时运行,有没有办法防止这种情况发生?

1 个答案:

答案 0 :(得分:1)

在锁定之前不要检查文件是否存在。相反,只是试图锁定它;如果该文件不存在,Boost将抛出interprocess_exception警告您文件被锁定。