2012-06-26 64 views
1

我有是偶爾零星拋出下面的異常代碼的一些問題:升壓進程間競爭條件預防

boost interprocess: no such file or directory 

有多個代碼訪問同一組文件,但一些代碼,將實時將文件移到不同的目錄。 處理和移動文件的代碼使用文件鎖定,例如,

boost::interprocess::file_lock 

的方法,代碼發生的是以下內容: 1)程序1進行檢查以查看它要鎖定的文件存在 2)如果上述檢查通過,它然後使用file_lock

鎖定該文件

我認爲,問題在於,在步驟1和2之間,程序2可以使用boost :: filesystem :: rename對程序1正在處理的文件進行移動。

如果兩個程序同時運行,有什麼辦法可以防止這種情況發生?

回答

1

不要在鎖定之前檢查文件是否存在。相反,只是試圖鎖定它;如果該文件不存在,Boost會發出interprocess_exception提醒您該文件已被鎖定。