增强进程间争用条件预防
boost interprocess race condition prevention
我在使用偶尔偶尔抛出以下异常的代码时遇到了一些问题:
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
,提醒您文件已锁定。
相关文章:
- 并行块(线程清理器)之外的 OpenMP 中的争用条件;误报?
- 如何在C++中创建争用条件
- C++上的手动重置事件(来自 C#)实现:如何避免争用条件
- 作为随机数生成器的争用条件
- 智能指针析构函数争用条件
- 尽管互斥锁,线程中的争用条件
- 在C++中递增和递减全局变量时的争用条件
- 为什么此代码不创建争用条件?
- __has_include() 和后续 #include 之间是否存在争用条件
- 什么保证两个不相关的线程中的不同不相关对象没有(不可避免的)争用条件?
- 此工厂方法是否会导致争用条件?
- 争用条件 2 个线程交替
- 标准::condition_variable 中可能存在的争用条件
- 启动子进程时的争用条件导致从管道读取挂起
- 当只有一个线程写入 c++ 中的布尔变量时,是否存在争用条件
- 避免在增加计数器时出现争用条件
- 是否有 std 或提升容器可以避免其插入和查找方法之间的争用条件
- 增强进程间争用条件预防
- pthread_once() 中的争用条件
- 发布标准实现争用条件