一頭檔案內容簡介:
classes
1.1 mutexes
mutex——
mutexclass(class)
recursive_mutex——recursivemutex class(class)
time_mutex——
timedmutex class(class)
recursive_timed_mutex——
recursivetimed murex(class)
1.2 locks
lock_guard—— lock_guard(classtemplate)
unique_lock——unique_lock(classtemplate)
1.3 other types
once_flag——flag argument type for call_once(class)
adopt_lock_t——ypeof adopt_lock(class)
defer_lock_t——type of defer_lock(class)
try_to_lock_t——ypeof try_to_lock(class)
1.4 functions
try_lock——try to lock multiple mutexes(function template)
lock——lock multiple mutexes(function template)
call_once—— call function once(public member function)
二 std::mutex
mutex是乙個互斥鎖物件,當某執行緒需要對資源獨佔訪問時,阻止需要獨佔訪問相同資源的其他執行緒同時對資源進行訪問。
member function
(constructor)——construct mutex(public member function)
lock——lock mutex(publicmember function)
try_lock——lock mutex if not locked(public member function)
unlock——
unlock mutex(public member function)
native_handle——get native handle(public member function)
examples
#include #include #include std::mutexmtx; //定義全域性互斥量
void fucone(intn, charc)
std::cout<< std::endl;
mtx.unlock();}
int main(int argc,_tchar* argv)
三 std::recursive_mutex
std::recursive_mutex 與 std::mutex 物件一樣,都是一種可以上鎖的物件,且成員函式相同。與std::mutex不同的是,std::recursive允許同乙個執行緒對互斥量多次上鎖(即遞迴上鎖),以獲取互斥量的多層所有權。std::recursive_mutex釋放互斥量時需要呼叫與該鎖遞迴深度相同次數的std::recursive_mutex::unlock()。即lock()次數與unlock()次數相同,除此之外,其與std::mutex用法大致相同。
四 std::time_mutex
1 member function
(constructor)——construct mutex(public member function)
lock——lock mutex(publicmember function)
try_lock——lock mutex if not locked(public member function)
try_lock_for——try to lock for time span(public member function)
try_lock_until——try to lock until time point(public member function)
unlock——unlock mutex(public member function)
native_handle——get native handle(public member function)
try_lock_for用法說明:其接受乙個時間範圍,表示在這一段時間範圍之內執行緒如果沒有獲得鎖則被阻塞住(與std::mutex::try_lock不同,try_lock被呼叫時如果沒有獲得鎖,直接返回false),如果在此期間其他執行緒獲得了鎖,則執行緒可獲得互斥量的鎖,如果超時(在指定時間內沒有獲得鎖),返回false
try_lock_until用法說明:其接受乙個時間點作為引數,在指定時間點未到來之前執行緒如果沒有獲得鎖則被阻塞,如果在此期間其他執行緒釋放了鎖,則該執行緒可獲得互斥量的鎖,如果超時(在指定時間點到來之前沒有獲得鎖),返回false
examples
#include #include #include #include std::timed_mutextime_mtx;
voidfireworks()
//獲取到互斥鎖時,此執行緒睡眠1s之後輸出字元「*」並換行
std::this_thread::sleep_for(std::chrono::milliseconds(1000));
std::cout<< "*" << std::endl;
//解鎖
time_mtx.unlock();}
int main(int argc,_tchar* argv)
for(auto&th : threads)
return0;
}
五 std::recusive_timed_mutex
std::recusive_timed_mutex與std::timed_mutex的關係跟std::recursive_mutex與std::mutex的關係一樣,這裡不多做介紹。
C 11多執行緒之mutex
mutex類是能用於保護共享資料免受從多個執行緒同時訪問的同步原語。mutex既不可複製亦不可移動。構造互斥。呼叫後互斥在未鎖定狀態。mutex 複製建構函式被刪除。mutex const mutex delete lock 鎖定互斥。若另一線程已鎖定互斥,則到lock的呼叫將阻塞執行,直至獲得鎖。...
C 11多執行緒學習筆記(2) mutex
具有允許相互排斥 mutex 併發執行關鍵 段的功能的標頭,從而可以顯式避免資料爭用。它包含mutex型別,lock型別和其他函式 禁止拷貝與移動構造,只有預設建構函式,通過其建立的mutex物件處於unlock狀態。通過mutex物件呼叫lock 函式,可以鎖住mutex物件,有三種情況 1 該互...
C 11多執行緒(四) mutex的應用
c 11的 mutex 比windows的功能相對豐富,和 boost mutex 基本類似,c 11 mutex主要分為以下4種 std mutex 基本mutex std recursive mutex 遞迴mutex,可以多重加鎖解鎖 std timed mutex 延時mutex,到了一定時...