1. 程式人生 > >linux檔案加鎖及解鎖

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;
        }
這是在檔案處理完後,對檔案進行解鎖,解鎖後,其他執行緒就可以對該檔案進行訪問了。