如何不等待 OpenMP 中的其他线程?

Posted

技术标签:

【中文标题】如何不等待 OpenMP 中的其他线程?【英文标题】:How not to wait for other threads in OpenMP? 【发布时间】:2010-08-03 05:16:31 【问题描述】:

我正在考虑在 C++ 中使用 OpenMP 进行多线程处理。但我想知道是否有办法告诉一个线程不要等待其他并发线程并继续我的程序? (也许我可以取消/杀死其他线程?)

我知道“nowait”子句的存在,但我希望动态地完成“等待”或“不等待”的决定(程序将根据我正在执行的过程的结果来决定)。

希望能得到一些建议。

提前致谢。

【问题讨论】:

【参考方案1】:

我会按照以下方式做一些事情

if(conditon)

     taskA_with_Barriers();
  
else

     taskA_without_Barrier();

condtion 需要在所有线程中保持相同的常量。

如果您需要取消线程,您可能使用了错误的技术。可能还想看看 pthreadsMPI

【讨论】:

@nacho4d 如果您使用 C++,则使用 boost 线程更有意义。 OpenMP 的功能可能非常有限

以上是关于如何不等待 OpenMP 中的其他线程?的主要内容,如果未能解决你的问题,请参考以下文章

OpenMP C++ 中的线程

OpenMP 中的同步

如何确认多核系统中的openmp是不是使用了所有内核?

如何修复 OpenMP 程序的 gdb 运行中的线程数

OpenMP 中的线程任务调度

OpenMP 中的并行累积(前缀)总和:线程之间的通信值