c++和OpenMP:如何使构造函数的初始化列表至关重要

C++ and OpenMP: How to make the initializer list of a constructor critical?

本文关键字:初始化 列表 至关重要 构造函数 何使 OpenMP c++      更新时间:2023-10-16

在使用OpenMP的c++中,是否有可能使构造函数的初始化列表中执行的操作在#pragma omp critical意义上是临界的?

OpenMP中critical结构的语法为:

#pragma omp critical [(name)] new-line
structured-block

在构造函数的初始化列表中执行操作的唯一方法是在被初始化的类中定义它们为critical。为了更好地解释我自己:

class Base {
public:
  Base() {
#pragma omp critical
    {
      /* Some critical operation here */
    }
  }
  /* ... */
}
class Derived : public Base {
public:
  Derived() : Base() {} // Here base call some critical code
  /* ... */
}

如果需要使Base构造函数中的操作仅在少数对象中至关重要,我会亲自尝试设计两个不同的Base策略并将Derived重构为宿主类(参见"现代c++设计"第1章关于策略的参考)。如果考虑聚合而不是继承,推理显然是相同的。