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

Force closing a thread using openMP in C++?

本文关键字:线程 openMP c++      更新时间:2023-10-16

我想在运行一定时间后关闭openMP中的线程。我该怎么做呢?

OpenMP线程不能从外部强制终止。它们没有一个句柄,你可以用它来执行join、interrupt、abort等操作。

事实上,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=%dn",i++, n, omp_get_thread_num(), gettid());
 }
printf("TID : %d - PT=%dn", tid, pt);
pthread_cancel(pt);

我不知道是否可以为特定的线程做到这一点,但您可以使用技巧实现类似的功能。你基本上要做的是,设置一个标志,并在时间到的时候将它刷新到正在运行的线程中。查看链接了解更多信息