我写了一个如下的类:
#include <atomic>
#include <mutex>
class ThreadCounter
{
static inline std::atomic<std::size_t> thread_count = 0;
static thread_local ThreadCounter instance;
ThreadCounter()
{
++thread_count;
}
~ThreadCounter()
{
--thread_count;
}
public:
static size_t get()
{
return thread_count;
}
};
#include <iostream>
int main()
{
std::cout << ThreadCounter::get() << std::endl;
}
我希望它打印1
,但我看到了0
。
我假设对于每个启动的线程,instance
都将被构造(我非常确定,因为我以前在另一个案例中观察到了这种行为)并递增计数器。但是,返回的值始终为零。
我还尝试将示例放在类的外部,使用static t_l
和t_l
-only说明符,放在头文件和单独的.cpp
文件中。这些都不管用。
有没有什么诀窍可以让它工作,或者这种方法是不可能的?
1条答案
按热度按时间s71maibg1#
thread_local
变量很奇怪。全局
thread_local
变量不是在启动线程时构造的。相反,它们是在您第一次从给定线程访问它们时构造的。您不能在任何地方访问
instance
,因此它不是构造的。