C 11 併發 多執行緒

2021-09-30 12:49:56 字數 1040 閱讀 9839

通常情況下,原子操作是通過互斥(mutual exclusive)的訪問來保證的。

linux下借助posix標準的pthread庫的互斥鎖:

#include 

#include

using

namespace

std;

static

long

long total = 0;

pthread_mutex_t m = pthread_mutex_initializer;

void* func(void *)

}int main()

if (pthread_create(&t2, null, &func, null))

pthread_join(t1, null);

pthread_join(t2, null);

cout

<< total << endl; // 9999999900000000

return

0;}

上面**為共享變數建立互斥鎖(m),並在進入臨界區前後進行加鎖(pthread_mutex_lock)和解鎖(pthread_mutex_unlock),從而保證累加的**為原子操作。但這樣對互斥鎖的管理無疑是種負擔,而在c++11中不需要如此麻煩:

#include 

#include

#include

using

namespace

std;

atomic_llong total ; // 原子資料型別

除了使用上圖中的已經定義好的原子型別,我們還可以使用atomic類模板,通過std::atomict;能定義出任意的原子型別。編譯器會保證產生併發情況下行為良好的**,以避免執行緒間對資料t的競爭。

C 11併發程式設計 多執行緒std thread

c 11引入了thread類,大大降低了多執行緒使用的複雜度,原先使用多執行緒只能用系統的api,無法解決跨平台問題,一套 平台移植,對應多執行緒 也必須要修改。現在在c 11中只需使用語言層面的thread可以解決這個問題。所需標頭檔案 thread noexcept 乙個空的std thread...

C 11 多執行緒 併發程式設計總結

建立std thread,一般會繫結乙個底層的執行緒。若該thread還繫結好函式物件,則即刻將該函式執行於thread的底層執行緒。執行緒相關的很多預設是move語義,因為在常識中線程複製是很奇怪的行為。joinable 是否可以阻塞至該thread繫結的底層執行緒執行完畢 倘若該thread沒有...

C 11併發與多執行緒總結

一 執行緒概念 建立及傳參 二 獨佔互斥鎖 mutex,lock guardy與其他mutex 三 unique lock替換lock guardy 四 單例模式 singleton 下的執行緒安全問題 五 window臨界區 六 condition variable條件變數 七 std async...