1

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

boost interprocess: no such file or directory

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

boost::interprocess::file_lock

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

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

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

4

1 回答 1

1

锁定前不要检查文件是否存在。相反,只需尝试锁定它;如果文件不存在,Boost 会发出interprocess_exception警告,提示您文件已被锁定。

于 2012-06-27T04:41:27.327 回答