C++并发编程实战---阅读笔记
生活随笔
收集整理的這篇文章主要介紹了
C++并发编程实战---阅读笔记
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1. 當把函數對象傳入到線程構造函數中時,需要避免“最令人頭痛的語法解析”。如果傳遞了一個臨時變量,而不是一個命名的變量;C++編譯器會將其解析為函數聲明,而不是類型對象的定義。
例如:
class background_task { public: void operator()() const { do_something(); do_something_else(); } }; background_task f; std::thread my_thread(f);//正確 std::thread my_thread(background_task());//???my_thread變成了一個函數???這里相當與聲明了一個名為my_thread的函數,這個函數帶有一個參數(函數指針指向沒有參
數并返回background_task對象的函數),返回一個 std::thread 對象的函數,而非啟動了一個
線程。
使用在前面命名函數對象的方式,或使用多組括號①,或使用新統(tǒng)一的初始化語法②,可以避
免這個問題。
如下所示:
使用lambda表達式也能避免這個問題。
std::thread my_thread([]{ do_something(); do_something_else(); });?
2.?精心組織代碼來保護共享數據
切勿將受保護數據的指針或引用傳遞到互斥鎖作用域之外,無論
是函數返回值,還是存儲在外部可見內存,亦或是以參數的形式傳遞到用戶提供的函數中
去。
轉載于:https://www.cnblogs.com/zhanghu52030/p/9322958.html
總結
以上是生活随笔為你收集整理的C++并发编程实战---阅读笔记的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: dubbo集群服务下一台服务挂了对服务调
- 下一篇: c/c++ 模板与STL小例子系列一 自