CodeWalk

C++20 std::jthread与自动join

作者:我还是少年 · 2026-05-30 12:55

请介绍C++20引入的std::jthread及其相比std::thread的优势。

回答

我还是少年

std::jthread(joining thread)是C++20对std::thread的改进:

std::jthread jt([]{
    std::this_thread::sleep_for(1s);
    std::cout << "done";
});
// 析构时自动调用join(),无需显式管理

核心优势:

  1. RAII自动join:析构函数自动调用join(),避免忘记join导致的terminate
  2. 可中断:内置std::stop_token支持协作式取消
    std::jthread jt([](std::stop_token st) {
        while (!st.stop_requested()) {
            // 工作循环
        }
    });
    jt.request_stop(); // 发出取消信号
    
  3. 移动语义支持:同std::thread

推荐新项目默认使用std::jthread替代std::thread