C++20 std::stop_token与线程协作取消
请说明C++20中std::stop_token、std::stop_source和std::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()。