5

我正在尝试使用 OpenMP 并行我的程序,有时我觉得我走到了死胡同。

我想在我在类中定义(和初始化)的函数成员中共享变量。如果我理解正确,则不可能对类#pragma omp parallel shared(foo)的数据成员(例如intboost::multi_arraystd::vector)进行处理。例如:在类中的向量数据成员上使用 push_back()。更新 a 的值boost::multi_array

我的问题是 OpenMP 是否适合它,或者我应该使用 boost::thread 还是 tbb?或其他...什么支持 C++ API

回复

4

1 回答 1

1

正如文档所述,shared定义一个对象仅在内存中放置一次。例如,如果您的foo对象包含std::vector某种类型的 a,那么对于循环中的项目应该是完全可以的。push_back但是您应该确保您的代码是线程安全的,无论是通过原子指令还是使用互斥部分。

于 2011-06-29T14:28:30.727 回答