c++ - 使用 C++ API 的多线程

标签 c++ openmp boost-thread tbb boost-mpi

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

我想在我在类中定义(和初始化)的函数成员中共享变量。如果我理解正确,则不可能对数据成员执行 #pragma omp parallel shared(foo)(例如 intboost::multi_arraystd::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/

相关文章:

c - 使用 openMp 进行矩阵乘法时出现段错误?

C++:在 header 中实例化boost::thread

c++ - 为什么函数指针定义可以使用任意数量的与号 '&' 或星号 '*' ?

c++ - 子类中的默认 move 构造函数

c++ - 不能毫无问题地从 auto_ptr 继承

c++ - C++中没有数据成员的类

使用 MPI/OpenMP 的派生数据类型(嵌套类对象)容器的 C++ 程序

c - 在 Code::Blocks 中运行 OpenMP

java - 连接线程(阻塞调用线程直到线程终止)和普通函数调用有什么区别

c++ - 十进制值:cout << dec << boost::this_thread::get_id()