如何预定义 <atomic> 变量?

How to predefine <atomic> variable?

我正在做关于多线程的作业并有这样的模板(粘贴其中的一部分,我应该更改):

...
class MeanCounter : public MeanCounterBase {
public:

...
};
...

我需要使用<atomic>并在class中预定义它。

我做了什么:

class MeanCounter : public MeanCounterBase {
public:
  std::atomic<unsigned> W;

  void MeanCounterBase () {
    W.store(0);
  }
private:
...
};
...

但是根本没用!程序编译无误。但是在开始的所有线程中,W 都不等于 0。我做错了什么?

一种方法:为均值计数器实现一个构造函数,将 W 设置为 0。 另一种方法:使用默认成员初始化程序。

我认为您的意思可能是 MeanCounter() 而不是 void MeanCounterBase () 来声明一个初始化原子值的子 class 构造函数。我对 atomics 不是很熟悉,但我认为你可以在初始化列表而不是构造函数体中初始化它。

您的问题在这里:

  void MeanCounterBase () {
    W.store(0);
  }

这只是 MeanCounter class 中的一个函数,我怀疑你是否调用过它。您可能想要的是 constructor for MeanCounter:

 MeanCounter() : W(0) { }