LINUX多執行緒讀寫同一個檔案 加鎖
當有多個工作執行緒要同時對一個檔案進行寫操作時,如果不對該檔案進行加鎖就可能會因誤操作而引起一系列的問題。
解決這個問題有多種方法。我們這裡考慮使用檔案鎖來對檔案進行保護,因為這個方法簡單易行。具體方法是使用Flock函式進行加鎖:
if((flock(fd, LOCK_EX | LOCK_NB))< 0)
{
std::cout<<"Log::The log have been locked"<<std::endl;
return FALSE;
}
使用LOCK_EX是對檔案描述符fd進行加鎖,如果成功,返回0,表示該檔案還沒有被加鎖,可以對其進行寫操作。如果失敗返回-1,表示該檔案已經被加鎖,正在被使用,故要等到其解鎖後才能使用。
LOCK_NB表示非阻塞。加鎖後對該檔案的具體寫操作如下:
if((flock(fd, LOCK_UN ))<0)
{
std::cout<<"Log::unlock the logfile error"<<std::endl;
return FALSE;
}
這是在檔案處理完後,對檔案進行解鎖,解鎖後,其他執行緒就可以對該檔案進行訪問了。
轉自 http://blog.csdn.net/youngkingyj/article/details/25238585
相關文章
- 多執行緒與併發----讀寫鎖執行緒
- 為什麼多執行緒讀寫shared_ptr需要加鎖執行緒
- c++多執行緒按行讀取同一個每行長度不規則檔案C++執行緒
- Linux執行緒之讀寫鎖小結Linux執行緒
- 執行緒間通訊就是讀寫同一個變數執行緒變數
- threading多執行緒資源加鎖thread執行緒
- 多執行緒系列(十一) -淺析併發讀寫鎖StampedLock執行緒
- linux多執行緒-----同步機制(互斥量、讀寫鎖、條件變數)Linux執行緒變數
- GCD 多執行緒安全 單寫多讀GC執行緒
- 多執行緒_鎖執行緒
- 多執行緒的這些鎖知道嗎?手寫一個自旋鎖?執行緒
- Java多執行緒(2)執行緒鎖Java執行緒
- iOS底層原理 多執行緒之安全鎖以及常用的讀寫鎖 --(11)iOS執行緒
- Linux檔案讀、寫、執行許可權Linux
- linux多執行緒-----同步物件(互斥量、讀寫鎖、條件變數)的屬性Linux執行緒物件變數
- Java 共享資料讀寫(多執行緒)Java執行緒
- 多執行緒下載檔案執行緒
- Linux多執行緒的使用一:互斥鎖Linux執行緒
- 【C/C++多執行緒程式設計之九】pthread讀寫鎖C++執行緒程式設計thread
- Java多執行緒13:讀寫鎖和兩種同步方式的對比Java執行緒
- iOS多執行緒安全-13種執行緒鎖?iOS執行緒
- 多執行緒(2)-執行緒同步互斥鎖Mutex執行緒Mutex
- java多執行緒–同步鎖Java執行緒
- Java多執行緒-無鎖Java執行緒
- 多執行緒統計多個檔案的單詞數目---C++0x多執行緒使用示例執行緒C++
- 死鎖:多執行緒同時刪除唯一索引上的同一行執行緒索引
- Linux雜談:程式鎖核+實時執行緒導致的讀寫鎖死迴圈Linux執行緒
- Java多執行緒(五):死鎖Java執行緒
- java多執行緒(5)死鎖Java執行緒
- Python 多執行緒和鎖Python執行緒
- Java多執行緒7:死鎖Java執行緒
- 多執行緒鎖的問題執行緒
- Java多執行緒中執行緒安全與鎖問題Java執行緒
- JAVA多執行緒詳解(3)執行緒同步和鎖Java執行緒
- 多執行緒讀寫優化(雙buff記憶體交換代替有鎖設計)執行緒優化記憶體
- 請教一個多執行緒的問題--wait多個鎖執行緒AI
- 利用多執行緒寫一個賣票程式執行緒
- 同步寫兩個資料庫--多執行緒資料庫執行緒