C++可以让pthread(Windows)保持打开状态来多次运行一个函数吗

C++ Can a pthread (Windows) be kept open to run a function multiple times?

本文关键字:运行 一个 状态 函数 pthread Windows C++      更新时间:2023-10-16

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

我的问题是,有没有一种方法可以在最初生成这些pthread,让它们运行函数,然后在不关闭它们的情况下再次使用它们来运行相同的函数?还是在执行任务后需要关闭它们?

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

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

您需要通过例如使用pthread_mutex来确保添加任务的线程安全。

你也可以使用一个条件变量(pthread_cond_t)来表示何时有更多的任务需要保存

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


顺便说一句,您可能更喜欢标准库中不那么繁琐的threading。

为什么不使用成熟的并行处理库或语言扩展,如openmp、cilk、tbb。所有这些现在都是可移植的,得到了主要操作系统和编译器的支持。微软也有ppl,这是TBB的双胞胎。

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

例如,任务向量可以通过默认线程数并行运行,简单如(cilk中):

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

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