强制在C++中使用openMP关闭线程?
答
线程的杀死是可能的[外部并行],不使用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);
的[是否有可能杀了纺纱线?]
可能重复(http://stackoverflow.com/questions/7978668/is-it-possible-to-kill-a-spinning-thread) –
@JoachimPileborg它不是重复的。他问的是openmp,而不是明确的线程。 – Tudor
@Tudor OpenMP线程和普通线程有什么区别?一个线程是一个线程是一个线程,它是如何启动应该不重要。 –