LINUX多執行緒讀寫同一個檔案 加鎖

在南京看海發表於2016-07-26

當有多個工作執行緒要同時對一個檔案進行寫操作時,如果不對該檔案進行加鎖就可能會因誤操作而引起一系列的問題。

  解決這個問題有多種方法。我們這裡考慮使用檔案鎖來對檔案進行保護,因為這個方法簡單易行。具體方法是使用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

相關文章