c++ 使用thread_local计数线程

vyswwuz2  于 2023-06-25  发布在  其他
关注(0)|答案(1)|浏览(98)

我写了一个如下的类:

#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_lt_l-only说明符,放在头文件和单独的.cpp文件中。这些都不管用。
有没有什么诀窍可以让它工作,或者这种方法是不可能的?

s71maibg

s71maibg1#

thread_local变量很奇怪。
全局thread_local变量不是在启动线程时构造的。相反,它们是在您第一次从给定线程访问它们时构造的。
您不能在任何地方访问instance,因此它不是构造的。

相关问题