私は実行する必要がある機能を持っていますn=1000
回。この関数はモンテカルロスタイルのシミュレーションを行い、結果としてint
を返します。 nthreads=4
を並行して実行したいと思います。スレッドが1サイクル終了すると、結果はstd::vector<int>
になるはずです。 したがって、1000サイクル後、私は1000 int
のベクトルを得ました。これは統計で調べることができます。スレッドセーフstd :: atomic <vector<int>>を作成できますか?
std::vector
はスレッドセーフではないため、私はstd::mutex
(これは確かにうまくいくでしょう)と考えました。
しかし、私はベクトルをアトミックに宣言してミューテックスを回避することができますか? std::atomic<std::vector<int>>
はありますか?それにpush_back
などを使用できますか?
std :: atomic>がコンパイルされましたか? –
DawidPi
私はこの機械で試すことはできません...しかし、ちょうど原子を介して来た。 – dani
私はちょうどあなたが1000の実行を持っていることをあなたが最初から知っていて、あなたのコンテナが正確に1000の結果を保存し、なぜ動的コンテナを使用したいのかを追加したいのですか?私は、std :: vectorはその実装で配列を使用していることを知っています。したがって、最初から十分なスペースを確保しておくと、再配置は必要ありません(std :: arrayを使用してもパフォーマンスは向上しません)。 – dptd