0

我目前正在测试 pthreads 的使用情况,以加速我拥有的其他代码。基本上我的代码目前拥有的是几个最终进行矩阵计算的 for 循环。我尝试生成将同时进行这些计算的线程,最终将运行时间缩短了一半。

我的问题是,有没有办法最初产生这些 pthread,让它们运行函数,然后再次使用它们来运行相同的函数而不关闭它们?或者执行任务后是否需要关闭它们?

顺便说一句,我正在使用 Windows,使用 pthreads 库。

4

2 回答 2

2

您可以创建一个queue任务,您的线程将对新任务进行采样并在有任何任务时出列(最好是一些取消标志来优雅地停止它们)。

您需要通过例如使用pthread_mutex.

您还可以使用条件变量 ( pthread_cond_t) 来指示何时有更多任务需要执行

这样,您可以在开始时生成任意数量的线程,并在需要时添加任务。


作为旁注,您可能应该更喜欢thread标准库的不那么繁琐。

于 2014-08-26T15:55:17.090 回答
0

为什么不使用成熟的并行处理库或语言扩展,如。所有这些现在都非常便携,得到了主要操作系统和编译器的支持。微软也有,它是 TBB 的孪生兄弟。

因此,您不必发明轮子,而是让库来处理线程和负载平衡;并防止您陷入这样的陷阱:为什么 OpenMP 的性能优于线程?

例如,任务向量可以在默认情况下并行运行,线程数就像(在 cilk 中)一样简单:

cilk_for(int i = 0; i < tasks.size(); i++)
    task[i].some_function();

如果需要,您还可以更改线程数。

于 2014-08-26T17:58:41.523 回答