Cpp 七 std thread 標準庫多執行緒

2021-10-10 02:48:59 字數 3831 閱讀 6510

c++

14cmake 3.17

macos 10.15

.5clion

#include

#include

void

func1()

void

func2()

intmain()

現象:

先列印輸出func1兩秒後再列印輸出func2,再過兩秒後退出程式

#include

#include

void

func1()

void

func2()

intmain()

現象:

幾乎同時列印輸出func1 func2, 兩秒後退出程式

連線

std::thread t1

(func1)

;t1.

join()

;

分離

std::thread t1

(func1)

;t1.

detach()

;

獲取執行緒id

std::thread t1

(func1)

;std::thread::id t1_id = t1.

get_id()

;std::cout <<

"t1 id:"

<< t1_id << std::endl;

交換兩個執行緒物件所代表的底層控制代碼(underlying handles)。

std::thread t1

(func1)

;std::thread t2

(func2)

;std::cout <<

"t1 id:"

<< t1.

get_id()

<< std::endl;

std::cout <<

"t2 id:"

<< t2.

get_id()

<< std::endl;

std::

swap

(t1, t2)

;std::cout <<

"t1 id:"

<< t1.

get_id()

<< std::endl;

std::cout <<

"t2 id:"

<< t2.

get_id()

<< std::endl;

t1.join()

;t2.

join()

;

# output

hello, thread!

t1 id

:0x7000069c8000

t2 id

:0x700006a4b000

t1 id

:0x700006a4b000

t2 id

:0x7000069c8000

func1

func2

mutex是用來保證執行緒同步的,防止不同的執行緒同時操作同乙個共享資料。

#include #include #include int count = 10;

std::mutex lock;

void func1()

}void func2()

}int main()

# output98

7654

3210

-1

但是使用mutex是不安全的,當乙個執行緒在解鎖之前異常退出了,那麼其它被阻塞的執行緒就無法繼續下去。使用lock_guard則相對安全,它是基於作用域的,能夠自解鎖,當該物件建立時,它會像m.lock()一樣獲得互斥鎖,當生命週期結束時,它會自動析構(unlock),不會因為某個執行緒異常退出而影響其他執行緒

...

while

(count>0)...

執行緒的建立和銷毀會消耗系統資源,為了避免系統的消耗,加入執行緒池概念,為的就是建立的執行緒存到佇列中,執行緒執行結束後,不銷毀,等到下乙個申請執行緒時,從佇列中取出已有的執行緒

這裡使用github上已經寫好的第三方執行緒池庫

#include

#include

#include

#include

"threadpool.h"

void

func1()

void

func2()

intmain()

# output

func1: func1: func2:

0x700002a07000

:func20x700002901000 :func1

func2:

0x700002984000

:func1

0x700002a8a000

:func2

func2:

0x700002901000

:func2

有兩個執行緒的id為0x700002901000,證明執行緒池可用

class

mythread};

intmain()

# output

func_1:

1

目標執行緒函式,必須是static(類方法)

class

mythread};

intmain()

func_2中的形參是乙個引用型別,如果直接傳引數,編譯會報錯

原 C 新標準之std thread

原 總結c 11 thread 更多參考資料 從c 11開始提供了執行緒的支援,終於可以方便的編寫跨平台的執行緒 了。除了std thread類,還提供了許多其它便利同步的機制,本篇總結是c 11學習筆記系列的首篇總結。std thread定義在中,提供了方便的建立執行緒的功能。class thre...

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

參考 乙個常用的建構函式形式 template class function class.args explicit thread function f,args args 引數均為右值引用,其為臨時物件不會影響原來的物件 執行緒的函式引數必須是乙個沒有返回值的函式簡單使用 include 包含執行...

標準C程式設計七 02

第一章 c語言概述4 1.1 c語言的歷史 1.2 c語言的主要特徵 3 c語言的開發流程 4 c語言的規範 1.3 示例程式1 顯示一條資訊 1.4 示例程式2 兩個數相加 1.5 示例程式3 利息計算 1.6 示例程式4 子例程的使用 1.7 示例程式5 數學函式的使用 8 程式的實現總結 1....