究竟何时初始化在全局范围内声明的thread_local变量?

Dav*_*ian 5 c++ storage multithreading initialization

例如:

#include <thread>

thread_local int n = 1;

void f()
{
    ++n; // is n initialized here for each thread or prior to entering f()?
}

int main()
{
    std::thread ta(f);
    std::thread tb(f);

    ta.join();
    tb.join();
}
Run Code Online (Sandbox Code Playgroud)

它仍然是不完全清楚,从这里为n初始化时。

Ser*_*eyA 5

很简单,并且全部符合规范。n每当运行新线程时-将在输入任何特定于线程的函数之前将其初始化。

确切地说,它将被初始化三次。