多线程中static对象

it2026-01-11  4

#include<iostream>classStaticInit{public:StaticInit(){ std::cout<<"Init Obj "<<std::endl;}staticStaticInit& getInstance(){staticStaticInit i;return i;}void testfun(){ std::cout<<"test ---fun"<<std::endl;}};staticStaticInit instance;int main(){ std::cout<<"pr----"<<std::endl; instance.testfun();getInstance();} 如上面代码,对于单个线程来说,是安全的。 但是对于多线程就不好说了,主要是涉及到static对象初使化的问题。也就是C++中这些static对象和变量是何时初使化的。 先给出结论:      全局变量和文件域的静态变量都将在main开始之前被初始化;只有函数内的局部静态变量才是在第一次使用才初始化的,而且不是线程安全的。静态变量有可能初始化多次
静态对象初使化的验证可以用上面的例子来说明,先 g++-ggdb test.cpp 然后运行的时候,在第7行代码打上断点,也就是在构造函数里面打上断点。看程序在执行到第24和25行的时候有没有跳到第7行去 执行这个对象的初使化。
  推荐阅读: 1、 多线程中局部静态变量初始化的陷阱          http://blog.csdn.net/wingfiring/article/details/498242                                                               

null

转载于:https://www.cnblogs.com/yml435/p/6386154.html

最新回复(0)