C 11多執行緒之mutex

2021-10-10 04:54:04 字數 1868 閱讀 1362

mutex類是能用於保護共享資料免受從多個執行緒同時訪問的同步原語。

mutex既不可複製亦不可移動。

//構造互斥。呼叫後互斥在未鎖定狀態。

mutex()

;//複製建構函式被刪除。

mutex

(const mutex&)=

delete

;

lock

鎖定互斥。若另一線程已鎖定互斥,則到lock的呼叫將阻塞執行,直至獲得鎖。

示例:

int num =0;

mutex num_mutex;

//保護num

void

foo(

int id)

}int

main()

輸出為:

1 => 1

2 => 2

1 => 3

2 => 4

1 => 5

2 => 6

try_lock

嘗試鎖定互斥。立即返回。成功獲得鎖時返回true,否則返回false

示例:

//from cppreference

std::chrono::milliseconds interval

(100);

std::mutex mutex;

int job_shared =0;

// 兩個執行緒都能修改 'job_shared',

// mutex 將保護此變數

int job_exclusive =0;

// 只有乙個執行緒能修改 'job_exclusive'

// 不需要保護

// 此執行緒能修改 'job_shared' 和 'job_exclusive'

void

job_1()

else}}

// 此執行緒只能修改 'job_shared'

void

job_2()

intmain()

輸出為:

job exclusive (1)

job exclusive (2)

job exclusive (3)

job exclusive (4)

job shared (1)

unlock

解鎖互斥。

互斥必須為當前執行執行緒所鎖定,否則行為未定義。

lock_guard是互斥體包裝器,為在作用域塊期間占有互斥提供便利 raii 風格機制。

建立lock_guard物件時,它試圖接收給定互斥的所有權。控制離開建立lock_guard物件的作用域時,銷毀lock_guard並釋放互斥。

lock_guard類不可複製。

示例:

int num =0;

mutex num_mutex;

//保護num

void

foo(

int id)

intmain()

輸出:

1 => 1

2 => 2

C 11多執行緒 mutex學習

一頭檔案內容簡介 classes 1.1 mutexes mutex mutexclass class recursive mutex recursivemutex class class time mutex timedmutex class class recursive timed mutex...

C 11多執行緒之std lock guard

原文 std lock guard lock guard 類是乙個mutex封裝者,它為了擁有乙個或多個mutex而提供了一種方便的 raii style 機制。譯註 所謂的raii,全稱為resource acquisition is initialization,漢語是 資源獲取即初始化 但是這...

C 11多執行緒(四) mutex的應用

c 11的 mutex 比windows的功能相對豐富,和 boost mutex 基本類似,c 11 mutex主要分為以下4種 std mutex 基本mutex std recursive mutex 遞迴mutex,可以多重加鎖解鎖 std timed mutex 延時mutex,到了一定時...