C++并发编程实战---阅读笔记
1. 當(dāng)把函數(shù)對象傳入到線程構(gòu)造函數(shù)中時(shí),需要避免“最令人頭痛的語法解析”。如果傳遞了一個(gè)臨時(shí)變量,而不是一個(gè)命名的變量;C++編譯器會(huì)將其解析為函數(shù)聲明,而不是類型對象的定義。
例如:
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變成了一個(gè)函數(shù)???這里相當(dāng)與聲明了一個(gè)名為my_thread的函數(shù),這個(gè)函數(shù)帶有一個(gè)參數(shù)(函數(shù)指針指向沒有參
數(shù)并返回background_task對象的函數(shù)),返回一個(gè) std::thread 對象的函數(shù),而非啟動(dòng)了一個(gè)
線程。
使用在前面命名函數(shù)對象的方式,或使用多組括號①,或使用新統(tǒng)一的初始化語法②,可以避
免這個(gè)問題。
如下所示:
使用lambda表達(dá)式也能避免這個(gè)問題。
std::thread my_thread([]{ do_something(); do_something_else(); });?
2.?精心組織代碼來保護(hù)共享數(shù)據(jù)
切勿將受保護(hù)數(shù)據(jù)的指針或引用傳遞到互斥鎖作用域之外,無論
是函數(shù)返回值,還是存儲(chǔ)在外部可見內(nèi)存,亦或是以參數(shù)的形式傳遞到用戶提供的函數(shù)中
去。
轉(zhuǎn)載于:https://www.cnblogs.com/zhanghu52030/p/9322958.html
總結(jié)
以上是生活随笔為你收集整理的C++并发编程实战---阅读笔记的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: dubbo集群服务下一台服务挂了对服务调
- 下一篇: 支付宝官网登录电脑版(支付宝官网电脑版邮