gpt4 book ai didi

c++ - 如何等待多个线程完成并重用它们?

转载 作者:行者123 更新时间:2023-11-30 03:21:01 26 4
gpt4 key购买 nike

我有一个 C++ 程序试图并行处理数组的每一行,在一行完全完成后,它会移至下一行。我当前的程序为数组的每一行创建一个线程,并在使用后加入它们。但似乎程序在创建/关闭线程上浪费了很多时间。

有没有办法只创建一次这些线程,并且对于每一行,它们等待最慢的线程完成,然后执行下一行的函数?

这是我的示例代码:

#include <iostream>
#include <thread>
using namespace std;
#define THREAD 5
int arr[2][10000];
void update_arr(int i, int j_s, int j_to){
for (int j = j_s; j <= j_to; j++)
arr[i%2][j]= arr[(i-1)%2][j]+2*arr[(i-1)%2][j-1];
}

int main(){
for (int i = 0; i < 10000; i++) arr[0][i] = 1;
for (int i = 1; i <= 10000; i++){
thread t[THREAD];
for (int ii = 0; ii < THREAD; ii++)
t[ii] = thread(update_arr, i, ii * 10000 / THREAD, (ii+1) * 10000 / THREAD - 1);

for (int ii = 0; ii < THREAD; ii++)
t[ii].join();
}
cout<<arr[1][9999]<<endl;
}

最佳答案

这个问题,创建和销毁线程的成本比较高,是什么旨在避免。请注意,std::async 类可以使用线程池实现(但不能保证),因此您应该首先考虑使用它。

关于c++ - 如何等待多个线程完成并重用它们?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52397998/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com