參考深入理解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...