Multithreading C++;静态变量初始化和线程
我有下面一段使用线程和静态变量初始化的C++11代码。我的问题是: < C++语言对静态变量的初始化有什么保证或保证?下面的代码显示正确的值,但是我似乎找不到新标准中的一个段落,它提到了内存模型应该如何与线程交互。变量何时变成线程本地的Multithreading C++;静态变量初始化和线程,multithreading,initialization,c++11,static-members,memory-model,Multithreading,Initialization,C++11,Static Members,Memory Model,我有下面一段使用线程和静态变量初始化的C++11代码。我的问题是: < C++语言对静态变量的初始化有什么保证或保证?下面的代码显示正确的值,但是我似乎找不到新标准中的一个段落,它提到了内存模型应该如何与线程交互。变量何时变成线程本地的 #include <iostream> #include <thread> class theclass { public: theclass(const int& n) :n_(n) { printf("ac
#include <iostream>
#include <thread>
class theclass
{
public:
theclass(const int& n)
:n_(n)
{ printf("aclass(const int& n){}\n"); }
int n() const { return n_; }
private:
int n_;
};
int operator+(const theclass& c, int n)
{
return c.n() + n;
}
void foo()
{
static theclass x = 1;
static theclass y = x + 1;
printf("%d %d\n",x.n(),y.n());
}
int main()
{
std::thread t1(&foo);
std::thread t2(&foo);
t1.join();
t2.join();
return 0;
}
#包括
#包括
分类
{
公众:
类(常量内部和外部)
:n(n)
{printf(“aclass(const int&n){}\n”);}
int n()常量{return n_;}
私人:
int n_;
};
整数运算符+(常量类&c,整数n)
{
返回c.n()+n;
}
void foo()
{
静态类x=1;
静态类y=x+1;
printf(“%d%d\n”,x.n(),y.n());
}
int main()
{
std::线程t1(&foo);
标准:螺纹t2(&foo);
t1.join();
t2.连接();
返回0;
}
该代码将实现您所期望的功能。见§6.7.4
静态局部变量包括:
。。。控件第一次传递其声明时已初始化。。。
如果控件在变量为
初始化后,并发执行应等待完成
初始化的一部分
换句话说,编译器确保线程在初始化静态局部变量时进行协作。每个线程将被初始化一次,并且每个线程只有在对象完全初始化后才能访问该对象
编译器仅在使用thread\u local
关键字显式请求时才会创建线程局部变量