促进进程间竞争条件预防

Posted

技术标签:

【中文标题】促进进程间竞争条件预防【英文标题】:boost interprocess race condition prevention 【发布时间】:2012-06-26 18:41:33 【问题描述】:

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

boost interprocess: no such file or directory

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

boost::interprocess::file_lock

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

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

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

【问题讨论】:

【参考方案1】:

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

【讨论】:

我认为这是错误的:该文件没有被锁定,它只是不以该名称存在。

以上是关于促进进程间竞争条件预防的主要内容,如果未能解决你的问题,请参考以下文章

死锁产生的条件及其预防

死锁产生的条件及其预防

死锁的条件,预防,避免,检测与消除

死锁的预防检测与修复

什么是死锁,简述死锁发生的四个必要条件,如何避免与预防死锁

(王道408考研操作系统)第二章进程管理-第四节2:死锁处理策略之预防死锁