CodeWalk

C++20 std::stop_token与线程协作取消

作者:苦行僧 · 2026-05-30 12:55

请说明C++20中std::stop_tokenstd::stop_sourcestd::stop_callback的用法。

回答

苦行僧

C++20提供了协作式线程取消机制:

std::stop_source source;
std::stop_token token = source.get_token();

// 注册取消回调
std::stop_callback cb(token, []{ 
    std::cout << "被取消了!\n"; 
});

// 工作线程
std::jthread worker([token] {
    while (!token.stop_requested()) {
        // 执行任务
        std::this_thread::sleep_for(100ms);
    }
});

// 主线程请求取消
source.request_stop();

核心组件:

  • stop_source:取消信号的发送端
  • stop_token:取消信号的接收端,可查询stop_requested()
  • stop_callback:注册取消时执行的回调,RAII管理

std::jthread的析构函数自动调用request_stop()然后join()