我正在做多线程的作业并且有这样的模板(粘贴它的一部分,我应该改变):
...
class MeanCounter : public MeanCounterBase {
public:
...
};
...
我需要使用<atomic>
并在课堂上预定义它。
我做了什么:
class MeanCounter : public MeanCounterBase {
public:
std::atomic<unsigned> W;
void MeanCounterBase () {
W.store(0);
}
private:
...
};
...
但它根本不起作用!程序编译没有错误。但是在开始的所有线程中W不等于0.我做错了什么?
答案 0 :(得分:3)
你的问题在这里:
void MeanCounterBase () {
W.store(0);
}
这只是MeanCounter
类中的一个函数,我怀疑你是否曾经称它为。你可能想要的是MeanCounter
的构造函数:
MeanCounter() : W(0) { }
答案 1 :(得分:1)
我认为您可能需要MeanCounter()
而不是void MeanCounterBase ()
来声明初始化原子值的子类构造函数。我对atomic
不是很熟悉,但我认为你可以在初始化列表而不是构造函数体中初始化它。
答案 2 :(得分:0)
一种方法:为均值计数器实现一个构造函数,将W
设置为0。
另一种方法:使用默认成员初始化程序。