C 多執行緒 mutex類 (三)

2021-08-11 17:06:55 字數 1507 閱讀 2765

mutex 類

詳細方法介紹參見c++ ref

recursive_mutex

timed_mutex

recursive_timed_mutex 整合了recursive_mutex和timed_mutex特性

lock方法執行區別

- 對任意的mutex type物件,若其(cur_mutex)已被其他thread locked,則呼叫lock()方法將會進入block,呼叫try_lock()方法將會失敗,返回false;呼叫try_lock_for/try_lock_until()方法將會block一段時間,在此期間一直等待獲取cur_mutex的lock

- 若cur_mutex還沒有被任意thread獲取lock,則所有lock方法將會獲得lock並返回

- 若cur_mutex已被當前thread獲取lock,對於mutex物件和timed_mutex物件,呼叫lock(),try_lock(),try_lock_for(),try_lock_until() 會產生死鎖,函式有的會產生error,有的不會; 若對recursive_mutex和recursive_timed_mutex呼叫lock(),try_lock(),try_lock_for(),try_lock_until(),將會產生新一級的lock,最後unlock時也需要呼叫相同數目的unlock方法

unique_lock

other type

functions

call_once()

#include // std::cout

#include // std::thread, std::this_thread::sleep_for

#include // std::chrono::milliseconds

#include // std::call_once, std::once_flag

using

namespace::std;

int winner;

void set_winner(int x) //僅執行一次

void print_winner(int x)

std::once_flag winner_flag;

void wait_1000ms(int id)

int main()

可能的執行結果

waiting for

thefirst

among

10 threads to count 1000 ms...

enter into set_winner

winner thread: 2

call_once after sleep

new winner 2

press any key to continue . . .

C 多執行緒 Mutex

dotnet 2010 05 29 19 07 24 閱讀151 字型大小 大 中小訂閱 互斥鎖 mutex 互斥鎖是乙個互斥的同步物件,意味著同一時間有且僅有乙個執行緒可以獲取它。互斥鎖可適用於乙個共享資源每次只能被乙個執行緒訪問的情況 函式 建立乙個處於未獲取狀態的互斥鎖 public mute...

C 多執行緒同步 二 Mutex

monitor和lock多用於鎖定被呼叫端,而mutex則多用鎖定呼叫端。lock this 或者是用monitor也是一樣的,如下 monitor.enter this do something monitor.exit this monitor的好處是可以用tryenter this,timeo...

C 多執行緒程式設計之mutex

參考 www.cplusplus.com 互斥量 互斥鎖,用於鎖住臨界區,防止多個執行緒同時處於臨界區中對臨界資源進行操作。c 中的 mutex是乙個類,可建立可鎖物件。mutex物件提供專屬所有權,且不支援遞迴。所謂專屬所有權是指,對已經被其他執行緒占有的mutex物件,當前執行緒不能再進行鎖操作...