如何在使用C ++ 11线程模型或tbb线程类时取消特定线程?

时间:2014-08-24 15:26:19

标签: multithreading c++11 pthreads tbb

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

1 个答案:

答案 0 :(得分:2)

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

因此问题是“如何在C ++中取消线程”。答案是:没有内置取消,只有interrupt politely

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

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

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