如何取消一个特定的线程,而使用c++ 11线程模型或tbb线程类

How to cancel a specific thread while using C++11 thread model or tbb thread class?

本文关键字:线程 c++ 模型 tbb 取消 何取消 一个      更新时间:2023-10-16

在使用c++ 11线程模型或TBB线程类时,我如何取消其他线程(如果您使用pthread库,您可以使用pthread_cancel取消其他线程)?问:c++ 11线程模型或tbb线程类中是否有线程取消点作为pthread的概念?

TBB为c++ 03提供了一个尽可能接近c++ 11的线程类兼容层。其他库(例如boost)也提供了一个没有cancel()方法的线程类。

因此,问题是"如何在c++中取消线程"。答案是:没有内置的取消功能,只要礼貌地打断即可。

pthread_cancel对于一般c++程序来说是一个坏主意,因为它不尊重对象的生命周期。

编写自己的取消点,读取取消标志,如果设置了取消标志,则抛出异常以正确展开堆栈。

std::atomic<bool> is_cancelled;
void check_cancel() {
    if(is_cancelled)
        throw std::runtime_error("cancelled");
}