參考:
//乙個常用的建構函式形式
template
<
class
function
,class..
. args >
explicit
thread
( function&& f, args&&..
. args )
;//引數均為右值引用,其為臨時物件不會影響原來的物件
//執行緒的函式引數必須是乙個沒有返回值的函式
簡單使用#include
//包含執行緒標頭檔案
#include
thread_local
int g_num =1;
void
thredfun1()
void
thredfun2
(int x,
int y)
intmain()
互斥量
版本作用
mutex
c++11
最基本的互斥量
timed_mutex
c++11
有超時機制的互斥量
recursive_mutex
c++11
可重入的互斥量
recursive_timed_mutex
c++11
結合 timed_mutex 和 recursive_mutex 特點的互斥量
shared_timed_mutex
c++14
具有超時機制的可共享互斥量
shared_mutex
c++17
共享的互斥量
使用raii技術對mutex的封裝
互斥量管理
版本作用
lock_guard
c++11
基於作用域的互斥量管理
unique_lock
c++11
更加靈活的互斥量管理
shared_lock
c++14
共享互斥量的管理
scope_lock
c++17
多互斥量避免死鎖的管理
使用raii技術在類構造時呼叫鎖的加鎖函式,析構時呼叫函式的解鎖函式,成員變數是乙個鎖的引用,大概為以下意思:
class
raii
~raii()
private
: mutex& mutex_;
};
lock_guard使用示例:
//出括號guard析構解鎖
條件變數void
fun1()
}void
fun2()
虛假喚醒
變數的執行緒也有可能會醒來。我們將條件變數的這種行為稱之為虛假喚醒。因此將條件放在乙個 while 迴圈中意味著光喚醒條件變數不行,還必須條件滿足程式才能繼續執行正常的邏輯。
另外一種系統呼叫被中斷:pthread_cond_wait是 futex 系統呼叫,屬於阻塞型的系統呼叫,當系統呼叫被訊號中斷的時候,會返回-1,並且把 errno 錯誤碼置為eintr。很多這種系統呼叫為了防止被訊號中斷都會重啟系統呼叫(即再次呼叫一次這個函式)。但有的系統呼叫被中斷可以系統自己重試,有的不可以重試的,不可以重試的需要呼叫者自己手動重試。此處使用while迴圈則相當於呼叫者自己重試。若不判斷條件向下執行,則不符合**邏輯,即當前條件不滿足無法執行後續操作。若使用if則不會重新判斷會直接向下執行,若條件不滿足則有可能會引起程式的崩潰。
原子操作類
#include
#include
intmain()
Cpp 七 std thread 標準庫多執行緒
c 14cmake 3.17 macos 10.15 5clion include include void func1 void func2 intmain 現象 先列印輸出func1兩秒後再列印輸出func2,再過兩秒後退出程式 include include void func1 void f...
CPP 學習筆記 多執行緒
知識點 自 linux 下編譯 帶的cpp需要加上 pthread 編譯選項。例如 g std c 11 pthread a.cpp qt creator 編譯帶的cpp有 暫時不知道怎麼去除!1 include v include using namespacestd void run char ...
c 標準庫多執行緒入門
從c 11開始,語言核心和標準庫開始引入了對多執行緒的原生支援。如下所示 int dosth char c returnc intfunc1 intfunc2 int tmain int argc,tchar ar 輸出如下 func1 background,func2 foreground.res...