C++可以让pthread(Windows)保持打开状态来多次运行一个函数吗
C++ Can a pthread (Windows) be kept open to run a function multiple times?
我目前正在测试pthreads的使用情况,以加快我拥有的其他代码的速度。从本质上讲,我的代码目前有几个for循环,最终完成矩阵计算。我尝试生成将同时进行这些计算的线程,结果将运行时间缩短了一半。
我的问题是,有没有一种方法可以在最初生成这些pthread,让它们运行函数,然后在不关闭它们的情况下再次使用它们来运行相同的函数?还是在执行任务后需要关闭它们?
顺便说一下,我正在使用Windows,使用pthreads库。
您可以创建一个任务的queue
,您的线程将对新任务进行采样,并在出现任何任务时出列(最好是一些取消标志来优雅地停止它们)。
您需要通过例如使用pthread_mutex
来确保添加任务的线程安全。
你也可以使用一个条件变量(pthread_cond_t
)来表示何时有更多的任务需要保存
通过这种方式,您可以在开始时生成任意数量的线程,并在需要时添加任务。
顺便说一句,您可能更喜欢标准库中不那么繁琐的thread
ing。
为什么不使用成熟的并行处理库或语言扩展,如openmp、cilk、tbb。所有这些现在都是可移植的,得到了主要操作系统和编译器的支持。微软也有ppl,这是TBB的双胞胎。
因此,您不必发明轮子,而是让库来处理线程和负载平衡;并防止您陷入这样的陷阱:为什么OpenMP的性能优于线程?
例如,任务向量可以通过默认线程数并行运行,简单如(cilk中):
cilk_for(int i = 0; i < tasks.size(); i++)
task[i].some_function();
如果需要,还可以更改线程数。
相关文章:
- 如何运行一个类的多个对象,该类的函数仅在C++中调用线程?
- 仅在 boost::hash_combine 中运行一个程序期间保证确定性
- c++:运行一个函数 8 次,并将每个答案添加到数组或 JSON 中
- 助推.如何在另一个测试单元中运行一个测试组件
- 如何编译和运行一个新的 C++ Actor 框架项目?
- 我想重新运行一个线程
- 如何使用c ++代码来调用和运行一个现有的python文件?
- 我想用 c++ 运行一个 vtk 示例,但我不知道如何导入所需的数据
- 首先我已经成功安装了 caffe,但是当我运行一个 caffe 项目时,cmake 还可以,后来会发出很多错误
- 为什么我需要运行一个应用程序作为Papi库工作的根源
- C++:如何运行一个系统命令N次(异步)并返回N次执行时间
- 并行运行一个应用程序,同时用 C++ 启动另一个应用程序
- 从Ubuntu到Debian运行一个可执行文件
- 在 Apache 上运行一个 C++ CGI 程序
- C++:如果输入不是整数,为什么这段代码会运行一个无休止的循环
- 在solaris中运行一个可执行的c++程序
- 如何在C++中创建一个循环,运行一个计时器并允许用户同时输入(非阻塞用户输入)
- 无论如何,我可以在visualstudio2005上与visualstudio2015一起运行一个已经编码的项目吗
- 如何启动一个 boost::线程运行一个成员函数
- 如何在QtCreator(Linux Ubuntu)中编译和运行一个随机的单个C++文件