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