static变量初始化顺序

1.1 全局变量、文件域的static变量和类的static成员变量在main函数执行之前初始化
1.2 局部静态变量在第一次被使用时初始化

static变量的线程安全

2.1 非局部静态变量是线程安全的
2.2 局部静态变量在C++11后也是线程安全的

单例模式

分为懒汉式和饿汉式,在使用前全局对象已经创建的是饿汉式单例,在使用的时候创建的是懒汉式单例

01. 普通懒汉式单例,线程不安全

// 懒汉式单例模式,线程不安全
class SingleInstance {public:static SingleInstance *GetInstance() {if (m_SingleInstance == nullptr)m_SingleInstance = new SingleInstance;return m_SingleInstance;}private:SingleInstance();~SingleInstance();SingleInstance(const SingleInstance &signal) = delete;SingleInstance &operator=(const SingleInstance &signal) = delete;private:static SingleInstance *m_SingleInstance;
};SingleInstance *SingleInstance::m_SingleInstance = NULL;

02. 加锁的懒汉式单例,线程安全

//懒汉式单例,加锁,线程安全
class SingleInstance {public:static SingleInstance *GetInstance() {pthread_mutex_lock(&mutex);if (m_SingleInstance == nullptr)m_SingleInstance = new SingleInstance;return m_SingleInstance;pthread_mutex_unlock(&mutex);}private:SingleInstance();~SingleInstance();SingleInstance(const SingleInstance &signal) = delete;SingleInstance &operator=(const SingleInstance &signal) = delete;static SingleInstance *m_SingleInstance;static pthread_mutex_t mutex;
};
SingleInstance *SingleInstance::m_SingleInstance = NULL;

03. 局部静态变量实现的懒汉式单例,C++11后线程安全(推荐使用的方式)

// 局部静态变量实现的懒汉式单例,C++11后线程安全
class SingleInstance {public:static SingleInstance *GetInstance() {static SingleInstance instance;return &instance;}private:SingleInstance();~SingleInstance();SingleInstance(const SingleInstance &signal) = delete;SingleInstance &operator=(const SingleInstance &signal) = delete;
};

04. 饿汉式单例,天生线程安全,因为在main函数前已经初始化

//饿汉式单例,天生线程安全
class SingleInstance {
public:static SingleInstance *GetInstance() { return m_SingleInstance; }
private:SingleInstance();~SingleInstance();SingleInstance(const SingleInstance &signal) = delete;SingleInstance &operator=(const SingleInstance &signal) = delete;
private:static SingleInstance *m_SingleInstance;
};
SingleInstance *SingleInstance::m_SingleInstance = new SingleInstance;

C++ static 变量和线程安全和单例模式相关推荐

  1. 静态内部类、静态变量的加载次数-理解静态内部类实现线程安全的单例模式

    百度众说纷纭的情况下就不如自己写例子测试理论,话不多说,上代码: public class Sta {public static long date=System.currentTimeMillis( ...

  2. 静态内部类、静态变量的加载次数-理解静态内部类实现线程安全的单例模式懒加载

    原贴:https://www.cnblogs.com/suncoolcat/p/3362230.html 写的很详细,需细细品味. 百度众说纷纭的情况下就不如自己写例子测试理论,话不多说,上代码: p ...

  3. java 静态内部类 线程安全问题_单例模式的七种写法, 面试题:线程安全的单例模式...

    http://cantellow.iteye.com/blog/838473 http://meizhi.iteye.com/blog/537563 第一种(懒汉,线程不安全): Java代码  pu ...

  4. C++实现线程安全的单例模式

    C++实现线程安全的单例模式 1.单例模式 一个简单的单例模式很容易实现:构造函数声明为private或protect防止被外部函数实例化,内部保存一个private static的类指针保存唯一的实 ...

  5. 生产者消费者模型、信号量、线程池以及单例模式的实现

    生产者消费者模型!!---对典型的应用场景设计的解决方案 生产者与消费者模型应用场景:有线程不断的生产数据,有线程不断的处理数据. 数据的生产与数据的处理:放在同一个线程中完成,因为执行流只有一个,那 ...

  6. JAVA的多线程、死锁、线程间通信、如何规避死锁、线程安全的单例模式

    主要内容: 多线程 线程和进程间的关系 Java中的线程理论 Java中线程类的实现方式 Java中线程的常用方法 线程安全性问题 线程间通信 线程的死锁 如何规避死锁 线程安全的单例模式 多线程 线 ...

  7. C#中线程安全的单例模式

    一.单例模式 ①单例模式的定义:是用来保证这个类在运行期间只会被创建一个实例,并提供一个访问它的全局访问点. ②单例模式的作用:保证一个类只有一个访问实例,节省系统资源. ③单例模式的特点:私有构造方 ...

  8. java线程池使用单例模式

    一.线程池不使用单例模式 import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors;publ ...

  9. Java多线程中static变量的使用

    Java中 没处理好同步 导致两个线程同时为一个static变量赋值 会导致什么后果? Java中 没处理好同步 导致两个线程同时为一个static变量赋值 会导致什么后果?仅仅是多耗资源还是会引发异 ...

最新文章

  1. ppt流程图字体太小_论文答辩PPT攻略,答辩季你准备好了吗?
  2. 【Linux 内核 内存管理】RCU 机制 ① ( RCU 机制简介 | RCU 机制的优势与弊端 | RCU 机制的链表应用场景 )
  3. 给书配代码-电力经济调度(4):有功与辅助服务联合经济调度
  4. 一个按键控制数码管的开和关_基于FPGA的数字电路实验3:点亮数码管
  5. 网站搭建从零开始(四) 服务器的配置
  6. Hadoop之HDFS应用
  7. (1)DBA查询:数据库
  8. APP完整的启动流程
  9. 大数据分析技术趋势有哪些
  10. java个人网站源码下载_创建一个基于JAVA的个人网站(有源码也行)
  11. linux之kubuntu挂载硬盘
  12. 单细胞测序原理10X UMI Barcode
  13. 不可不知的设计师接活报价公式
  14. 另一只眼看软件研发效能提升,软件研发效能的“人性”与“物性”
  15. B站怎么下载视频中的音乐(不用辅助工具)
  16. .NET Core 和 .NET Framework 中的 MEF2
  17. PyG利用GraphSAGE实现Cora、Citeseer、Pubmed引用论文节点分类
  18. 你还在用${ }取值吗?珍爱网都没注意的小细节
  19. 未能加载文件或程序集“System.Data.OracleClient, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e0
  20. of介词短语作定语_介词短语做后置定语的用法

热门文章

  1. 四元数,对偶四元数,三维旋转,平移
  2. 为什么创建博客网站?
  3. Unittest单元测试总结
  4. Cloudcompare错误:an error occurred while loading‘ ’:the third party libary in charge of,las
  5. 安化云台山风景区,2022东坪完小研学旅行实践活动
  6. 计算机专业研究生考试265能调剂哪个学校,2020考研调剂参考:2019工商管理考研接受调剂院校名单...
  7. MOSFET损耗计算
  8. WSAStartup( )详解
  9. 关于setTimeout的一道经典面试题
  10. zookeeper启动报mkdir: 无法创建目录““: 没有那个文件或目录