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