0
我做了嘗試創建一個目錄的功能,然後寫一個簡單的文件:書面文件和的mkdir比賽條件c
buffer = "Hello world!";
string url = "a/b/c/d/";
string tmp = "";
string done = "";
while((tmp = GetBaseDir(url)).compare("")!=0){
done+=tmp;
mkdir(done.c_str(), 0777);
} // GetBaseDir returns "a/", and changes url to "b/c/d/"
ofstream file;
file.open((url+"file.txt").c_str(),ios::trunc);
file << buffer;
file.close();
正如你所看到的,它只是嘗試,如果有故障它只是繼續前進。
我讀過'打開'將失敗,如果另一個進程打開具有寫入權限的同一文件。但是,這是真的嗎?
如果我同時運行此代碼的多個實例,mkdir和寫操作會發生什麼?
[你有什麼試過](http://whathaveyoutried.com/)? – wallyk 2013-02-13 23:41:33
編輯: 我還沒有試圖重現那種競爭條件。我想知道mkdir是否可靠執行,或者我必須使用互斥鎖來保護它。以及在C++中的寫入操作。 當我搜索這個問題,而不是找到相關的東西,我發現更多的問題或信息關於如何使用mkdir http://linux.die.net/man/3/mkdir,而不是如何工作。文檔頁面沒有提到競爭條件。 我發現寫入操作的競爭條件也沒有幫助。他們提到了不同例子的競爭條件,但我已經知道了。 – 2013-02-14 00:17:52
我發現我可以使用打開的選項來保護文件O_WRONLY | O_CREAT | O_EXCL。但是,我不確定這是否足夠,或者我必須使用互斥鎖來確保正常工作。 – 2013-02-14 00:20:03