如何预定义<atomic>变量?

时间:2016-02-25 14:59:50

标签: c++ multithreading atomic

我正在做多线程的作业并且有这样的模板(粘贴它的一部分,我应该改变):

...
class MeanCounter : public MeanCounterBase {
public:

...
};
...

我需要使用<atomic>并在课堂上预定义它。

我做了什么:

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

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

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

3 个答案:

答案 0 :(得分:3)

你的问题在这里:

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

这只是MeanCounter类中的一个函数,我怀疑你是否曾经称它为。你可能想要的是MeanCounter构造函数

 MeanCounter() : W(0) { }

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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