c++ 异步下获取线程执行结果_【分享吧】C++11多线程库介绍
前言
? ? ? ?對于c/c++程序員來說,編寫跨平臺的多線程代碼十分的麻煩,因?yàn)榫€程的創(chuàng)建,同步接口在windows/linux平臺上差別非常大。好在c++11標(biāo)準(zhǔn)新增了線程庫,終于可以編寫跨平臺的多線程代碼了,現(xiàn)在我們就一起了解一下c++11新增了哪些線程相關(guān)的類。
std::thread – 創(chuàng)建線程
? ? ? ?在創(chuàng)建thread變量的同時,可以傳遞線程函數(shù)所需參數(shù),十分便捷。另外可以通過get_tid()獲取線程的tid,通過join等待線程返回,通過detach將線程分離。
std::yield - 線程重調(diào)度
? ? ? ?當(dāng)線程在某些情況可以讓出當(dāng)前cpu時間片時,可以調(diào)用此函數(shù),以提高其他線程的執(zhí)行效率。
std::this_thread::sleep_for – 線程睡眠
? ? ? ?此函數(shù)會阻塞當(dāng)前線程,直到指定的睡眠時間到達(dá)。
std::mutex – 線程間互斥
? ? ? ?std::mutex配合std::lock_guard,可以實(shí)現(xiàn)在某個作用域進(jìn)入時自動加鎖,退出時自動解鎖,也可以手動調(diào)用lock/try_lock/unlock來手動控制鎖的行為。
std::call_once – 單次調(diào)用
? ? ? ?某些場景下,我們需要代碼只被執(zhí)行一次,比如單例類的初始化,考慮到多線程安全,需要進(jìn)行加鎖控制。C++11中提供的call_once可以很好的滿足這種需求,實(shí)用又非常簡單。
std::condition_variable – 條件變量
? ? ? ?條件變量一般用于等待某個事件發(fā)生,需要配合互斥鎖一起使用。c++11中沒有提供信號量相關(guān)的類,需要等到c++20。
std::async +future – 異步運(yùn)行任務(wù)
? ? ? ?調(diào)用async異步開啟一個新的線程執(zhí)行某個任務(wù),返回的future變量代表任務(wù)執(zhí)行結(jié)果,當(dāng)future.get()返回時,代表任務(wù)執(zhí)行完畢,返回值即任務(wù)的返回值。
std::promise – 異步傳值
? ? ? ?除了在線程函數(shù)返回值以外,還可以通過promise對象來設(shè)定future對象的值。一個promise實(shí)例只能與一個future關(guān)聯(lián)共享狀態(tài),當(dāng)在同一個promise上反復(fù)調(diào)用get_future會拋出future_error異常。當(dāng)promise對象調(diào)用set_value時,future對象的get即可返回對應(yīng)值。
結(jié)語
? ? ? ?以上這些類基本可以覆蓋我們平時編寫多線程業(yè)務(wù)邏輯的需求范圍,接口簡潔易懂,推薦大家使用。
與50位技術(shù)專家面對面20年技術(shù)見證,附贈技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的c++ 异步下获取线程执行结果_【分享吧】C++11多线程库介绍的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python文本分类_教你用python
- 下一篇: python列表类型用什么表示_pyth