C++20規格のThread libraryを利用して、一括に多量threadを生成し、自動同期をしたいですけれども、アイディアをくださいますようお願い申し上げます。
非自動的、一般的なやりかたとして以下のようで、1000個のthreadの生成と同期をしようとしたら、少なくとも2000行のコードを書かなければなりませんね❣
これを避けたいのです。
C++
// スレッド起動(関数ポインタhogeをCallableとして起動)
thread thr1(hoge, 10, 1);
thread thr2(hoge, 20, 2);
thread thr3(hoge, 30, 3);
// 1000個まで続く....
//# thNの完了を待つ
thr1.join();
thr2.join();
thr3.join();
// 1000個まで続く....
C++20で多量のthreadを一括発行と自動同期する方法
Re: C++20で多量のthreadを一括発行と自動同期する方法
threadをvectorに入れるといいでしょう。
#include <iostream>
#include <thread>
#include <vector>
void hoge(int a, int b) {
std::cout << a << ' ' << b << std::endl;
}
int main(void) {
std::vector<std::thread> thr;
const int N = 1000;
for (int i = 1; i <= N; i++) {
thr.emplace_back(hoge, 10 * i, i);
}
for (auto& t : thr) {
t.join();
}
return 0;
}
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
Re: C++20で多量のthreadを一括発行と自動同期する方法
お返答ありがとうございます
Q1.
《 thr.emplace_back(hoge, 10 * i, i); 》はhogeをthread typeのvectorにhoge関数とその引数を入れるだけで、threadの実行になるのでしょうか。
Q2.
《 for (auto& t : thr) 》では tがiteratorに相当するもんでしょうか。
またよろしくお願いします
Q1.
《 thr.emplace_back(hoge, 10 * i, i); 》はhogeをthread typeのvectorにhoge関数とその引数を入れるだけで、threadの実行になるのでしょうか。
Q2.
《 for (auto& t : thr) 》では tがiteratorに相当するもんでしょうか。
またよろしくお願いします
Re: C++20で多量のthreadを一括発行と自動同期する方法
難しい問題に多くの人に早く聞きたいですね。何が悪いの?
大体どの掲示板もすぐ回答できる問題ではないですから。
みんなの叡智を拝見したいと思うわけ。
一概に否定されるのは科学技術色ではなくて、宗教邪教的な匂いプンプンでは?
単純な文法問題にわしは出さないだからね。
頑な宗教脳から打出して!
大体どの掲示板もすぐ回答できる問題ではないですから。
みんなの叡智を拝見したいと思うわけ。
一概に否定されるのは科学技術色ではなくて、宗教邪教的な匂いプンプンでは?
単純な文法問題にわしは出さないだからね。
頑な宗教脳から打出して!
Re: C++20で多量のthreadを一括発行と自動同期する方法
フォーラムルール違反です。こころな さんが書きました: ↑1年前難しい問題に多くの人に早く聞きたいですね。何が悪いの?
「相互リンクした場合のみ複数の掲示板で同じ質問しても OK」となっています。相互リンクすればマルチポストOK
相互リンクした場合のみ複数の掲示板で同じ質問しても OK
複数の掲示板で同じ質問をすることをマルチポストといい、大抵禁止されています。
しかし、ここでは相互リンクし、リンク先の掲示板でマルチポストが許されていれば
マルチポストはOKとしています。複数の掲示板で同じ質問をするときは相互リンクし、
どこの掲示板で同じ質問をしているか明確にして下さい。
今回の場合、相互リンクなしで複数の掲示板で同じ質問をしているため、違反となります。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
Re: C++20で多量のthreadを一括発行と自動同期する方法
> 何が悪いの?
誰が「悪い」と言ったのか?
私はマルチポストである旨を周知しただけ.
それがきっかけとなって,あなたが利用している各所のルールに従っていないことに気付いたのであれば,今からでも各所において適切に対処すればよいのではあるまいか.
ルール違反を認識してもなお適切な措置を講じず,自分勝手だけを貫こうとするのであれば,それは「悪い」と思うが.
誰が「悪い」と言ったのか?
私はマルチポストである旨を周知しただけ.
それがきっかけとなって,あなたが利用している各所のルールに従っていないことに気付いたのであれば,今からでも各所において適切に対処すればよいのではあるまいか.
ルール違反を認識してもなお適切な措置を講じず,自分勝手だけを貫こうとするのであれば,それは「悪い」と思うが.
Re: C++20で多量のthreadを一括発行と自動同期する方法
私が熱心な宗教家ならば真っ先に teratail の側に書いてるであろう.
あっちは厳しいですぞ.
あっちは厳しいですぞ.
Re: C++20で多量のthreadを一括発行と自動同期する方法
全ての箇所のルールに従った正当な(?)マルチポストであれば
ここのルールによって相互リンクが成されるのだから,あなただけでなく,読み手全員が
> みんなの叡智を拝見
できる形となるわけですな.すばらしい.
ここのルールによって相互リンクが成されるのだから,あなただけでなく,読み手全員が
> みんなの叡智を拝見
できる形となるわけですな.すばらしい.