我想在运行一段时间后在openMP中关闭一个线程。我怎么能这样做?
答案 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);