1. ホーム
  2. c++

[解決済み] C++11でスレッドオブジェクトの配列を作成する方法は?

2022-02-08 22:13:49

質問内容

新しいC++標準ライブラリで複数のスレッドを作成し、それらのハンドルを配列に格納する方法を学びたいのです。
スレッドを起動するにはどうすればよいですか?
私が見た例では、コンストラクタでスレッドを開始しますが、私が配列を使用する場合、コンストラクタを呼び出すことができません。

#include <iostream>
#include <thread>

void exec(int n){
    std::cout << "thread " << n << std::endl;
}

int main(int argc, char* argv[]){

    std::thread myThreads[4];

    for (int i=0; i<4; i++){
        //myThreads[i].start(exec, i); //?? create, start, run
        //new (&myThreads[i]) std::thread(exec, i); //I tried it and it seems to work, but it looks like a bad design or an anti-pattern.
    }
    for (int i=0; i<4; i++){
        myThreads[i].join();
    }

}

解決方法は?

何も凝ったことをする必要はなく、代入を使うだけです。 ループの中で、次のように書きます。

myThreads[i] = std::thread(exec, i);

で、動作するはずです。