考虑以下情况:
- 2个不同的网络端口,
boost::asio
每个端口都在自己的线程中 - 1 个端口正在接收和处理数据 -
class DataConnection
包裹在std::thread
- 1 个端口用于发送统计信息
class StatConnection
,也包含在std::thread
为了计算连接(和其他小数据块),我的想法是在类似的static
内部使用一个变量namespace
:
#include <atomic>
namespace app {
namespace status {
static std::atomic<long> counter = 0;
}
}
DataConnection
这对班级来说很好。在这里,我counter
在 c'tor 中递增并查看值递增。
但counter
在我的StatConnection
课上总是0
为什么会发生这种情况?
我尝试了一些替代方案:
- 交换
std::atomic<long>
:static volatile long
没有任何区别。 - 使用没有
static
关键字的命名空间。
然后我得到链接器错误:
multiple definition of `app::status::searchtime'
./src/status/Status.o:/[...]/include/status/Status.hpp:16: first defined here
[...]
那么为什么线程之间的值count
不同呢?