我正在尝试使用 OpenMP 并行我的程序,但有时我觉得我走到了死胡同。
我想在我在类中定义(和初始化)的函数成员中共享变量。如果我理解正确,则不可能对数据成员执行 #pragma omp parallel shared(foo)
(例如 int
、boost::multi_array
和 std::vector
) 的一个类。
例如:在类中的 vector 数据成员上使用 push_back()。
更新 boost::multi_array
的值。
我的问题是 OpenMP 是否适合它,或者我应该使用 boost::thread 还是 tbb?或其他...什么支持 C++ API
记录
最佳答案
作为documentation状态,shared
定义一个对象在内存中只放置一次。例如,如果您的 foo
对象包含某种类型的 std::vector
,它应该完全可以push_back
循环中的项目。但是您应该确保您的代码是线程安全的,无论是通过原子指令还是使用互斥部分。
关于c++ - 使用 C++ API 的多线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6518539/