新しい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);
そしてそれは動作するはずです。