我遇到了一些代码的问题,偶尔会偶尔抛出以下异常:
boost interprocess: no such file or directory
有多个代码访问同一组文件,但有些代码会将文件实时移动到不同的目录。 处理和移动文件的代码使用文件锁,例如
boost::interprocess::file_lock
代码中发生的过程如下: 1)程序1检查是否存在要锁定的文件 2)如果上述检查通过,则使用file_lock
锁定文件我认为问题在于,在步骤1和步骤2之间,程序2可以在程序1正在处理的文件上使用boost :: filesystem :: rename并移动它。
如果两个程序同时运行,有没有办法防止这种情况发生?
答案 0 :(得分:1)
在锁定之前不要检查文件是否存在。相反,只是试图锁定它;如果该文件不存在,Boost将抛出interprocess_exception
警告您文件被锁定。