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

问题描述:

我想在运行一定的时间后关闭openMP中的一个线程。我怎样才能做到这一点?强制在C++中使用openMP关闭线程?

+1

可能重复(http://*.com/questions/7978668/is-it-possible-to-kill-a-spinning-thread) –

+4

@JoachimPileborg它不是重复的。他问的是openmp,而不是明确的线程。 – Tudor

+0

@Tudor OpenMP线程和普通线程有什么区别?一个线程是一个线程是一个线程,它是如何启动应该不重要。 –

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

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

+0

你能提出一个跨平台线程库的C++,我可以在一段时间后强制关闭一个线程吗? – rushafi

+0

也许你可以使用pthreads。 Windows本身不支持它们,但有像这样的实现:http://sourceware.org/pthreads-win32/ – Tudor

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

线程的杀死是可能的[外部并行],不使用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); 
的[是否有可能杀了纺纱线?]