2011-06-27 75 views
0

你能幫助我瞭解如何在多線程的Linux應用程序,其中使用互斥:互斥在多線程的Linux應用程序

  • 數據中寫它是需要在寫鎖變量和數據讀取過程中讀取
  • 從變量它需要鎖定寫入。

所以可以同時讀取,但寫作操作是同一時間的單一操作。在寫入過程中,所有其他操作應在其完成之前等待。

回答

3

你在問什麼比mutexes更高一些。互斥鎖是一個簡單的低級設備。當你用一個互斥鎖來鎖定一個線程時,CPU要麼在獲得該鎖的線程中執行代碼,要麼正在執行完整的其他進程。換句話說,互斥鎖已經鎖定了屬於同一個(重量級)進程的所有其他線程。

你在問一個讀寫鎖。讀寫鎖在引擎蓋下使用互斥鎖。處理讀寫鎖的POSIX函數從pthread_rwlock_開始。由於您在Linux機器上,只需鍵入man pthread並查找標記爲「讀取/寫入鎖定程序」的部分。

0

如果您有從不同線程訪問(讀取和寫入)的全局或靜態對象,則需要使用互斥鎖。

1

您需要一個讀寫器鎖才能允許多個讀卡器/單個寫入器。

如果您沒有其他首選的線程庫,Boost.Thread就有其中之一(boost::shared_mutex)。這使用底層的PThreads原語,並且可能會節省您自己封裝原始API的時間。

我不會推薦你自己實現 - 很容易得到一些似乎可行的東西,但是在負載下崩潰或殺死性能或者(最糟糕的)以一種不應該的方式默默修改你的數據,所以你得到不好的結果。

在這裏也可以使用簡單的boost::mutex,如@Als所述,但不允許多個併發讀取。這很容易實現,並且可能已滿足您的需求,具體取決於您的讀/寫訪問配置文件。