std::unordered_map<int,T>
に約100の記入項目を記入する必要があります。これらは、構築するために高価であり、私はそれを同時に行うためのOpenMPを使用したい:std :: unorderd_mapを同時に入力するにはどうすればよいですか?
unordered_map<int, T> mapWithTs;
#pragma omp parallel for schedule(dynamic) // dynamic because T constructs in some unpredictable time.
for(int i=0; i<100; ++i)
{
mapWithTs.emplace(i, {i}) // calls the constructor T(i)
}
私はマップが焼き直しになり、その後、イテレータが有効でなくなることをお読みください。私はこの仕事をするために何をしなければなりませんか?
さらに、標準ライブラリの並行処理ソリューションはどのように見えますか?
建設費がかかりますが、安価に移動できますか?それぞれのスレッドが独自のベクトルを作成して1つのスレッドがそのベクトルオブジェクトをマップに移動できますか? – Galik
複数のスレッドを作成し、それぞれが独自のマップを作成した後、(単一のスレッドで)マップをマージします。 –
地図へのアクセスを同期(相互排除)するだけで済みます。私はOpenMPとの同期をどうやって行うのかはわかりませんが、おそらくあなたはそうしています。そうでない場合は、ドキュメントを参照してください。 –