【发布时间】:2015-12-18 02:06:29
【问题描述】:
我有一个需要执行n=1000 次的函数。此函数执行蒙特卡洛风格模拟并返回int 作为结果。我想并行运行nthreads=4。每当一个线程完成一个循环时,它应该将结果放入std::vector<int>。
因此,经过 1000 个周期后,我有一个 1000 个ints 的向量,可以通过统计数据进行检查。
由于std::vector 不是线程安全的,我想到了std::mutex(肯定会工作)。
但我想知道我是否可以将向量声明为原子的,从而绕过互斥锁?
是否有可能拥有std::atomic<std::vector<int>>?我可以在上面使用push_back 等吗?
【问题讨论】:
-
std::atomic<:vector>> 编译了吗?
-
我无法在这台机器上尝试...但只是遇到了原子。
-
我只是想补充一点,如果您从一开始就知道您将执行 1000 次,并且您的容器将准确存储 1000 个结果,那么为什么要使用动态容器?我知道 std::vector 在其实现中使用数组,如果您在一开始就保留足够的空间,则不需要重新分配(因此使用 std::array 不会有任何性能提升)。
标签: c++ multithreading c++11 vector