可能重複:
Is mutex needed to synchronize a simple flag between pthreads?一個簡單的並行線程變量共享
在POSIX環境我有兩個線程(與pthread_create()
初始化),A和B
A是有時會寫入一個標誌變量(一個int
),B有時會讀取它。
我需要用互斥鎖保護這個變量還是可以將這些操作視爲原子?
可能重複:
Is mutex needed to synchronize a simple flag between pthreads?一個簡單的並行線程變量共享
在POSIX環境我有兩個線程(與pthread_create()
初始化),A和B
A是有時會寫入一個標誌變量(一個int
),B有時會讀取它。
我需要用互斥鎖保護這個變量還是可以將這些操作視爲原子?
你應該保護它,如果變量比真/假標誌更復雜。不能保證一個線程在寫操作的中途不會讀取變量。
在某些情況下可以減少不使用互斥保護的方法(例如,如果變量只是遞增,則重複進行雙重讀取和檢查),但對於變量的一般修改,互斥量更好。你也不需要太關注的性能,互斥量非常高效。
當然,如果你絕對要必須刮儘可能多的時間,有一些技巧可以使用,但他們很少便攜。
是的,如果你在兩個線程中使用標誌,你需要互斥量。 Mutex是必須的,因爲假設線程B正在根據標誌執行兩個操作,並且線程A正在更新標誌值。在線程B中,假設在第一次操作完成上下文切換並且線程A改變標誌值後,線程B將獲得用於第二次操作的新標誌值,所以mutext是必須的。
您可以通過在線程本地內存中維護全局標誌值並在本地操作完成後更新全局標誌來最小化鎖定,方法取決於您的要求。
possible dup http://stackoverflow.com/questions/7223164/is-mutex-needed-to-synchronize-a-simple-flag-between-pthreads – FoolishSeth