在c++中使用openMP强制关闭线程
Force closing a thread using openMP in C++?
我想在运行一定时间后关闭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);
我不知道是否可以为特定的线程做到这一点,但您可以使用技巧实现类似的功能。你基本上要做的是,设置一个标志,并在时间到的时候将它刷新到正在运行的线程中。查看链接了解更多信息
相关文章:
- 在 openmp 中,omp_get_thread_num是否绑定到物理线程?
- 我使用 OpenMP 的线程越多,执行时间就越长,这是怎么回事?
- 并行块(线程清理器)之外的 OpenMP 中的争用条件;误报?
- 如何使用 OpenMP 使线程以相反的顺序写入其数字?
- 有人可以解释为什么使用 OpenMP 部分的运行速度比单个线程慢吗?
- 是否可以在并行区域中为共享 2D 数组创建选定元素的线程本地副本?(共享,私有,障碍:OPenMP)
- 如何让线程继续并启动其他功能 - C++使用 OpenMP?
- OpenMP:当我按线程 ID 访问共享变量时,我是否需要一个关键部分
- 多个 OpenMP 线程读取(而不是写入)共享变量的性能成本?
- 如何修复 OpenMP 程序的 gdb 运行中的线程数
- 充分私有化 OpenMP 线程中的数据
- openmp 锁由同一线程重新获取,而另一个线程正在等待它
- Openmp:所有线程由于一个线程中的延迟而停止
- OpenMP 线程创建
- OpenMP:共享同一算法的单线程和多线程实现
- C++ OpenMP 斐波那契:1 个线程的执行速度比 4 个线程快得多
- 在向量上声明缩减,在 1 个线程上运行给出的结果与没有 openmp 的结果不同
- for 循环内的多线程 - OpenMP
- 多线程 (openMP) - 多少个并行线程
- 顺序比多线程- OpenMp - c++更快