std::jthread与std::thread的区别
生活随笔
收集整理的這篇文章主要介紹了
std::jthread与std::thread的区别
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
特性上,std::jthread相比std::thread主要增加了以下兩個功能:
1.std::jthread對象被destruct時,會自動調用join,等待其所表示的執行流結束。
2.支持外部請求中止(通過get_stop_source、get_stop_token和request_stop)。
為什么不是選擇往std::thread添加新接口,而是引入了一個新的標準庫?因為std::jthread為了實現上述新功能,帶來了額外的性能開銷(主要是多了一個成員變量)。而根據C++一直以來“不為不使用的功能付費”的設計哲學,他們自然就把這些新功能拆出來新做了一個類。
// C++20新線程 jthread 體驗代碼 // // 編譯(編譯本代碼,-pedantic 不是必須的): // g++ -std=c++20 -Wall -pedantic -pthread -static-libstdc++ C++20_jthread.cpp -o C++20_jthread // // 要求GCC10及以上版本, // 可使用GCC的Docker鏡像靜態鏈接stdc++庫,以方便在非GCC10環境運行。 // // docker pull gcc // docker run --rm -it -v /data:/data gcc #include <chrono> //#include <coroutine> // -fcoroutines #include <iostream> #include <stdexcept> #include <thread>// 線程執行體 void thread_proc(std::stop_token st) {// 以往中,// 需要自己實現 stop 來停止線程,// 現在 jthread 內置了此能力。while (!st.stop_requested()) std::this_thread::sleep_for(std::chrono::seconds(1)); std::cout << "Thread " << std::this_thread::get_id() << " exit" << std::endl; }extern "C" int main() {std::jthread thr(&thread_proc); // 創建線程std::this_thread::sleep_for(std::chrono::seconds(10));thr.request_stop(); // 通知線程退出thr.join();return 0; }第二個特征jthread是幫助我們解決std::thread以前導致的困境:join或detach*。現在jthread來承擔一些責任。它的析構函數簡單地實現為:
這正是我們在上面的示例中所做的,因此我們可以刪除那里的最后兩行,如下:
即main的最后,我們不用join了,jthread對象被析構時,會自動調用join函數
總結
以上是生活随笔為你收集整理的std::jthread与std::thread的区别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 信息时代与大数据相关的8个专业
- 下一篇: glDrawElements参数在新旧版