在OpenMP并行部分的firstprivate中允许非POD数据类型?

时间:2011-09-21 19:04:28

标签: c++ openmp

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

是否可以将矢量对象设为firstprivate?

它编译并正确运行......它始终是线程安全的吗?

1 个答案:

答案 0 :(得分:1)

是的,你可以

  1. firstprivate变量每个线程初始化一次
  2. firstprivate对象是通过调用其复制构造函数构造的,并将主线程的变量副本作为其参数
  3. 基本上只要

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

    注意 STL容器满足这些条件,但您可以通过执行(非共享)指针元素等容器来改变语义。

    你很高兴