C 11多執行緒 mutex學習

2021-07-01 20:24:28 字數 3076 閱讀 2647

一頭檔案內容簡介:

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,到了一定時...