C 11 std thread 及其效率比較

2021-06-22 21:38:13 字數 968 閱讀 7912



參考深入理解c++11新特性————原子操作

1. 迴圈外加鎖,效率高於循壞內加鎖。(迴圈內加鎖效率令人髮指)

#include #include #include long long total = 0;

std::mutex g_mutex;

void inner_mutex_thread()

}void out_mutex_thread()

g_mutex.unlock();

}

迴圈內加鎖,兩個執行緒搶占資源
int main()

輸出:total = 9999999900000000

time = 98375

迴圈外加鎖,兩個執行緒搶奪資源

int main()

輸出:total = 9999999900000000

time = 686

2. 原子操作*

原子操作:多執行緒程式中「最小且不可並行化的」操作。原子操作都是通過互斥的訪問來保證的。

在c++11中,程式設計師不需要為原子資料型別顯示的宣告互斥鎖,或者呼叫加鎖,解鎖的api,執行緒能夠互斥的對原子型別進行訪問。

所以原子操作類似於序列程式設計,不用考慮加鎖,解鎖操作,降低了多執行緒程式設計難度。

#include #include #include #include std::atomictotal = 0; // 原子資料

void atomic_thread()

}int main()

輸出:total = 9999999900000000

time = 18112

效率上:迴圈外加鎖  大於  原子操作 大於 迴圈內加索

c 11特性之std thread 高階

部落格 c 11特性之std thread 初識 std thread 講了std thread join和std thread detach的用法。今天就再來點深入的。先看看這個 int main 一旦 detached,就不能再join 這個時候總要有新東西出場了 joinable includ...

c 11特性之std thread 高階二

繼續c 11的std thread之旅!下面討論如何給執行緒傳遞引數 這個例子是傳遞乙個string include include include void thread function std string s int main 如果執行,我們可以從輸出結果看出傳遞成功了。良好程式設計習慣的人...

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

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