Cpp標準庫多執行緒程式設計

2021-10-07 23:42:01 字數 1950 閱讀 9178

參考:

//乙個常用的建構函式形式

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...