如何预定义 <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 构造函数。我对 atomic
s 不是很熟悉,但我认为你可以在初始化列表而不是构造函数体中初始化它。
您的问题在这里:
void MeanCounterBase () {
W.store(0);
}
这只是 MeanCounter
class 中的一个函数,我怀疑你是否调用过它。您可能想要的是 constructor for MeanCounter
:
MeanCounter() : W(0) { }
我正在做关于多线程的作业并有这样的模板(粘贴其中的一部分,我应该更改):
...
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 构造函数。我对 atomic
s 不是很熟悉,但我认为你可以在初始化列表而不是构造函数体中初始化它。
您的问题在这里:
void MeanCounterBase () {
W.store(0);
}
这只是 MeanCounter
class 中的一个函数,我怀疑你是否调用过它。您可能想要的是 constructor for MeanCounter
:
MeanCounter() : W(0) { }