c++ - OpenMP 并行部分的 firstprivate 中是否允许非 POD 数据类型?

标签 c++ openmp

我们可以在 openmp 任务 pragma 的 firstprivate 子句中指定一个 std::vector 对象吗?

是否可以将 vector 对象设为 firstprivate?

它编译和运行正确...它总是线程安全的?

最佳答案

是的,你可以

  1. 第一个私有(private)变量每个线程初始化一次
  2. 第一个私有(private)对象是通过以主线程的变量拷贝作为参数调用其复制构造函数而构造的

所以基本上只要

  • 类的复制构造函数和赋值运算符是可访问的
  • 它们提供深层复制(值)语义

Note that the STL containers satisfy these criteria but you may alter the semantics by doing a container of (non-shared) pointer elements, etc.

一切顺利

关于c++ - OpenMP 并行部分的 firstprivate 中是否允许非 POD 数据类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7505228/

相关文章:

c++ - 为什么在 pragma omp critical 之后多次调用 printf 会产生乱码输出?

c - csc 中 spmv 的 openmp 并行化

c++ - 将标准容器传递给模板化类

c++ - 如果我知道它的地址,我能以某种方式访问​​它吗?

C++ 错误 : no match for 'operator>>' in 'input >> Group1->Entrepreneur::Item' |

c++ - 如何将 OpenMP 和 MPI 导入大型 CLion CMake 项目?

c++ - 关键字 "shared"是否可以防止竞争条件?

c++ - 如何在 C++ 中打印 .txt 文件中的特定数组条目?

c++ - 为什么可以更改 chars 数组中的字符,而使用 char * 则不可能?

c - 为什么我在代码中看到不一致之处?