linux檔案加鎖及解鎖
阿新 • • 發佈:2019-02-16
當有多個工作執行緒要同時對一個檔案進行寫操作時,如果不對該檔案進行加鎖就可能會因誤操作而引起一系列的問題。 解決這個問題有多種方法。我們這裡考慮使用檔案鎖來對檔案進行保護,因為這個方法簡單易行。具體方法是使用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; } 這是在檔案處理完後,對檔案進行解鎖,解鎖後,其他執行緒就可以對該檔案進行訪問了。