本文介绍: reorder就是在编译器底层进行优化重排指令的执行顺序。举个例子:这行代码在编译器底层大致可以分为三个步骤:1、分配内存2、调用构造器对内存进行初始化3、将内存的地址赋值给m_instance但在实际的运行过程中,编译器执行的顺序可能是1-》3-》2,这就会导致当多个线程同时调用getInstance方法并且m_instance为nullptr时,它们可能会同时通过if语句的判断条件进入临界区。
单例模式是一种设计模式,用于确保一个类只有一个实例,并提供一个全局的访问点来获取该实例。它常用于需要在整个应用程序中共享相同资源或状态的情况下。
饿汉式
在饿汉式中,实例在类加载时就被初始化,并且保证在多线程环境下的线程安全。
饿汉式下类的实例对象在类加载时就被创建并赋值给静态成员变量instance,因此不需要考虑线程安全问题。因为每次调用getInstance方法都会返回同一个实例。
饿汉式的优点是实现简单,线程安全;缺点是无法实现延迟加载,即类在加载时就创建好了实例,可能会浪费资源。
懒汉式
双检查锁,线程安全的版本
什么是reorder?
解决内存读写reorder不安全方法
代码解释
懒汉式的优缺点
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。