簡體   English   中英

使用pthread讀取關鍵節數據

[英]Reading Critical Section Data using pthreads

我有一個多線程應用程序,我正在將pthreads與pthread_mutex_lock函數一起使用。 我需要保護的唯一數據是一個數據結構。 如果僅在寫入數據結構時才應用鎖,是否安全? 還是在我每次讀寫時都應該應用鎖?

我發現了一個與此類似的問題,但這是針對Windows的,從這個問題來看,我的答案是可以。 只想確保即可。

編輯

跟進:所以我想傳遞一個命令行參數,並從中讀取(來自不同線程)。 我仍然需要使用pthread_mutex_lock嗎?

您可以使用pthreads_rwlock_t允許“一個寫入者或N個讀取者”並發。 但是,如果您堅持使用一般的pthread_mutex_lock ,則需要對其進行任何訪問以獲取對其保護的共享數據結構的訪問權,因此您可以將事情縮減為“一個讀寫器”並發。

除非您可以保證原子寫入(此時甚至不需要在寫入時鎖定),否則在讀取時也必須應用鎖定。 該問題是由於寫入需要超過1個周期而引起的。

假設您將8個字節寫為兩個4字節寫。 如果另一個線程寫完一半后開始運行,則讀操作將讀取無效數據。 它的傳動器通常會發生這種情況,但是當它發生時,很難找到一個可追蹤的錯誤。

是的,您需要被鎖定才能進行讀取和寫入。

編譯器和CPU不必原子地寫入結構中的字段。 另外,您的代碼可能不會自動執行,並且結構在某些方面可能與自身不同步。

如果您只需要共享一個整數值,則可以選擇使用原子整數。 GCC具有您可以使用的原子屬性。 這不像使用pthreads鎖那樣可移植。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM