C 學習記錄 多執行緒相關

2021-10-18 12:00:52 字數 2260 閱讀 5379

之前學過一點c語言多執行緒方面的內容(pthread.h),但是僅僅是會用,對多執行緒的實現原理什麼的基本上算是不了解。接下來,我的網路程式設計學習要進一步對**進行優化,其中肯定少不了對多執行緒的運用,所以在進行下一步之前,先系統的學習一下多執行緒。

本篇學習記錄使用的語言為c++,呼叫的執行緒庫為c++11裡的std::thread庫。

零、基本概念

一、基本執行緒建立 `thread`

二、等待/分離 `join/detach`

三、鎖 `lock/unlock`

四、原子操作 `atomic`

乙個程序可以有多個執行緒,而乙個執行緒只能屬於乙個程序。

單核cpu的多執行緒執行為每條執行緒**執行一段時間後進行切換,實際還是為同時進行一條執行緒,因為切換的速度很快,給人一種同時進行的錯覺;而多核cpu的多執行緒執行為同時進行多條執行緒,當執行緒數量大於核數量時,也會進行執行緒的切換,保證執行緒的進行。

多執行緒的執行是搶占式的,即多條執行緒下,沒有執行順序的規律,

如下所示,新建乙個thread物件,建構函式傳參第乙個為執行緒執行函式,隨後為執行函式的傳參。

#include

using

namespace std;

thread *t1 =

newthread

(work,

1111);

void

work

(int a)

}

如下所示,新建乙個thread陣列,建構函式傳參第乙個為執行緒執行函式,隨後為執行函式的傳參。

#include

using

namespace std;

thread *t[4]

;for

(int n=

0;n<

4;n++

)void

work

(int a)

}

join是在main函式中等待執行緒執行完才繼續執行main函式,detach則是把該執行緒分離出來,不管這個執行緒執行得怎樣,往下繼續執行main函式。

#include

using

namespace std;

thread *t[4]

;for

(int n=

0;n<

4;n++

)

由於執行緒的執行是搶占式的,且變數資源等是共享的,對於多條執行緒同時執行的情況下,可能對同一段內容同時執行,其中涉及到的變數操作等就會產生錯誤。類似同時對乙個變數進行運算操作,由於賦值前的值不同,結果也就不同,導致資料出現問題。此時就可以使用鎖的操作防止此類錯誤發生。

#include

//鎖的標頭檔案

#include

using

namespace std;

mutex m;

//鎖的變數

void

work

(int a)

}

但是不停的上鎖和解鎖很容易忘記解鎖,就會出現該段**無法被執行,導致程式出現問題,且不會報錯。為了避免這種情況,我們可以使用自解鎖。自解鎖會自動對所處區間的**進行上鎖和解鎖操作,從而防止忘解鎖的情況發生。

#include

//鎖的標頭檔案

#include

using

namespace std;

mutex m;

//鎖的變數

void

work

(int a)

}

頻繁的上鎖解鎖操作會非常耗時,如果上鎖區域執行的**很少的話會非常不划算。如果我們在多執行緒中需要對變數操作的話,頻繁的給變數操作區域上下鎖價效比很低,此時我們可以使用原子變數

#include

#include

#include

//原子操作

using

namespace std;

atomic_int count(0

);//原子變數

void

work

(int a)

}int

main()

for(

int n=

0;n<

2;n++

)while(1

)return0;

}

簡單 工作記錄 多執行緒相關

最近遇到多執行緒的問題,原來使用非同步請求多個介面 n 3次請求 方案一 使用多執行緒一次返回資料,最開始是使用5個執行緒,乙個執行緒順序請求3個介面,超時終止返回 缺點 測試發現必須3個介面全部成功才能取到資料,遇到部分介面失敗資料拿不到 方案二 使用6個執行緒,2個執行緒請求同乙個介面,每個執行...

C 多執行緒學習 一 多執行緒的相關概念

什麼是程序?當乙個程式開始執行時,它就是乙個程序,程序包括執行中的程式和程式所使用到的記憶體和系統資源。而乙個程序又是由多個執行緒所組成的。什麼是執行緒?執行緒是程式中的乙個執行流,每個執行緒都有自己的專有暫存器 棧指標 程式計數器等 但 區是共享的,即不同的執行緒可以執行同樣的函式。什麼是多執行緒...

C 多執行緒學習 一 多執行緒的相關概念

什麼是程序?當乙個程式開始執行時,它就是乙個程序,程序包括執行中的程式和程式所使用到的記憶體和系統資源。而乙個程序又是由多個執行緒所組成的。什麼是執行緒?執行緒是程式中的乙個執行流,每個執行緒都有自己的專有暫存器 棧指標 程式計數器等 但 區是共享的,即不同的執行緒可以執行同樣的函式。什麼是多執行緒...