OpenMP:线程有没有办法终止所有其他并行线程?

时间:2010-10-12 11:45:08

标签: multithreading shared openmp terminate

我正在尝试使用openMP进行大数据处理,而且相对较新。我的输入数据集很大,因此我将其分为多个子集,每个线程处理数据子集。线程中对子集中的每个数据项执行操作。如果其中一个线程在任何dataitem操作期间失败,我想终止其他线程并返回失败。使用共享变量是一个选项,但有更好的方法来做同样的事情吗?

1 个答案:

答案 0 :(得分:2)

如果你的一个线程扼杀了它的输入,你想要发生什么?你想让节目突然停止吗?或者你想停止并行执行并让程序的一个连续部分整理?

OpenMP并不是真正适用于任何一种操作,所以你要努力应对它,而不是像大多数初学者那样苦苦挣扎。正如您所建议的那样,您当然可以使用共享变量并编写自己的逻辑来停止程序,或者如果其中一个线程发生故障,则跳转到并行区域的末尾。但是这些操作没有OpenMP内在机制。

您可能想要调查OpenMP 3.0的新task功能。使用这些,您当然可以实现一个系统,将任务分派给返回成功或失败的线程,并有其他任务来处理失败。

最后,有人可能认为糟糕的输入不应该导致程序崩溃,但这是另一个主题。