在C ++中使用openMP强制关闭线程?

时间:2011-11-25 05:42:53

标签: c++ multithreading openmp

我想在运行一段时间后在openMP中关闭一个线程。我怎么能这样做?

3 个答案:

答案 0 :(得分:5)

OpenMP线程无法从外部强行杀死。它们没有可用于执行连接,中断,中止等操作的句柄。

事实上,OpenMP甚至不是为此而设计的。如果你需要做一些特殊的事情,最好让运行时处理线程并使用显式线程。

答案 1 :(得分:0)

我不知道是否可以为特定线程执行此操作,但您可以使用trick实现类似的功能。你基本上做了什么,你设置一个标志,并在时间到了时将其刷新到正在运行的线程。查看链接以获取更多相关信息。

答案 2 :(得分:0)

可以杀死线程[并行外],不是使用openmp API而是通过pthread_cancel()

注意:建议不要在parallel部分内杀死openmp线程,因为for循环结束时的Openmp屏障会使所有线程都遇到障碍。如果一个线程没有报告/命中,那么它将无限挂起。此外,用户可能必须在明确查杀时处理线程/内存清理。

 pthread_t pt;
 #pragma omp parallel for num_threads(3) firstprivate(i)
 for(n=0; n<10; ++n)
 {
        tid = gettid();
        pt = pthread_self();
        printf("i=%d -  %d - thread : %d :: TID=%d\n",i++, n, omp_get_thread_num(), gettid());
 }
printf("TID : %d - PT=%d\n", tid, pt);
pthread_cancel(pt);