我有一個需要執行的功能n=1000
次。此功能進行蒙特卡羅風格模擬,並返回int
作爲結果。我想並行運行nthreads=4
。每當一個線程完成一個循環時,它應該將結果放入std::vector<int>
。 因此,在1000個週期後,我有一個1000 int
s的矢量,可以通過統計檢查。我可以做一個線程安全的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