簡體   English   中英

如何等待多個線程完成並重用它們?

[英]How to wait for multiple threads to complete and reuse them?

我有一個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類(但不能保證),因此您應該考慮首先使用它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM