• 多线程中static对象


    1. #include<iostream>
    2. classStaticInit{
    3. public:
    4. StaticInit(){
    5. std::cout<<"Init Obj "<<std::endl;
    6. }
    7. staticStaticInit& getInstance(){
    8. staticStaticInit i;
    9. return i;
    10. }
    11. void testfun(){
    12. std::cout<<"test ---fun"<<std::endl;
    13. }
    14. };
    15. staticStaticInit instance;
    16. int main(){
    17. std::cout<<"pr----"<<std::endl;
    18. instance.testfun();
    19. getInstance();
    20. }
    如上面代码,对于单个线程来说,是安全的。
    但是对于多线程就不好说了,主要是涉及到static对象初使化的问题。也就是C++中这些static对象和变量是何时初使化的。
    先给出结论:
        全局变量和文件域的静态变量都将在main开始之前被初始化;只有函数内的局部静态变量才是在第一次使用才初始化的,而且不是线程安全的。静态变量有可能初始化多次

    静态对象初使化的验证可以用上面的例子来说明,先
    1. g++-ggdb test.cpp
    然后运行的时候,在第7行代码打上断点,也就是在构造函数里面打上断点。看程序在执行到第24和25行的时候有没有跳到第7行去
    执行这个对象的初使化。

     
    推荐阅读:
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     





  • 相关阅读:
    Python 15 爬虫(一)
    Python 14 Mysql数据库(二)
    Python 13 JQuery&Bootstrp
    Python 12 CSS&JavaScript&DOOM
    Python 11 HTML
    Python 10 MySQL数据库(一)
    Python 9 Redis
    Python 8 协程
    Python 7 并发编程
    SNMP协议详解
  • 原文地址:https://www.cnblogs.com/yml435/p/6386154.html
Copyright © 2020-2023  润新知