mutex類主要有兩種:獨佔式與共享式的互斥量。
▲ 獨佔式互斥量:
mutex: 獨佔式的互斥量,是最簡單最常用的一種互斥量型別
try_mutex: 它是mutex的同義詞,為了與相容以前的版本而提供
timed_mutex: 它也是獨佔式的互斥量,但提供超時鎖定功能
▲ 遞迴式互斥量:
recursive_mutex: 遞迴式互斥量,可以多次鎖定,相應地也要多次解鎖
recursive_try_mutex: 它是recursive_mutex 的同義詞,為了與相容以前的版本而提供
recursive_timed_mutex: 它也是遞迴式互斥量,基本功能同recursive_mutex, 但提供超時鎖定功能
▲ 共享式互斥量:
shared_mutex: multiple-reader/single-writer 型的共享互斥量(又稱讀寫鎖)。
其中mutex有lock和unlock方法,shared_mutex除了提供lock和unlock方法外,還有shared_lock和shared_unlock方法。
▲ 獨佔鎖:
boost::unique_lock,其中t可以mutex中的任意一種。
如果t為mutex,那麼boost::unique_lock,構造與析構時則分別自動呼叫lock和unlock方法。
如果t為shared_mutex,那麼boost::unique_lock,構造與析構時則分別呼叫shared_mutex的shared_lock和shared_unlock方法。
注意:scoped_lock也是獨佔鎖,其源**中定義如下;
typedef unique_lockscoped_lock;
typedef unique_lockscoped_timed_lock;
▲ 共享鎖:
boost::shared_lock,其中的t只能是shared_mutex類。
當然還有其他一些鎖:lock_guard, upgrade_lock等。
typedef boost::shared_lockreadlock;
typedef boost::unique_lockwritelock;
boost::shared_mutex rwmutex;
void readonly()
void writeonly()
對同乙個rwmutex,執行緒可以同時有多個readlock,這些readlock會阻塞任意乙個企圖獲得writelock的執行緒,直到所有的readlock物件都析構。如果writelock首先獲得了rwmutex,那麼它會阻塞任意乙個企圖在rwmutex上獲得readlock或者writelock的執行緒。
boost::mutex m;
void foo( )
;
// lock_guard只能像上面這樣使用,而unique_lock允許設定超時,推遲鎖定lock以及在物件銷毀之前unlock。
;
// 設定鎖超時
;
namespace
void threadfun1()
} void threadfun2()
} void threadfun3()
} }
// 1. mutex例子
void test_thread_syn1()
// 2. lock_guard例子
void test_thread_syn2()
// 3. scoped_lock例子
void test_thread_syn3()
多執行緒之Mutex 互斥量
include include include long g count 0 long g sum 0 static const int g s count 10 critical section g csthreadparamer critical section g csthreadcode h...
C 多執行緒程式設計之mutex
參考 www.cplusplus.com 互斥量 互斥鎖,用於鎖住臨界區,防止多個執行緒同時處於臨界區中對臨界資源進行操作。c 中的 mutex是乙個類,可建立可鎖物件。mutex物件提供專屬所有權,且不支援遞迴。所謂專屬所有權是指,對已經被其他執行緒占有的mutex物件,當前執行緒不能再進行鎖操作...
C 11多執行緒之mutex
mutex類是能用於保護共享資料免受從多個執行緒同時訪問的同步原語。mutex既不可複製亦不可移動。構造互斥。呼叫後互斥在未鎖定狀態。mutex 複製建構函式被刪除。mutex const mutex delete lock 鎖定互斥。若另一線程已鎖定互斥,則到lock的呼叫將阻塞執行,直至獲得鎖。...