您的位置:首页 > 娱乐 > 八卦 > 安阳区号查询_无忧ppt模板下载 免费_百度地图下载2022新版安装_广州推广系统

安阳区号查询_无忧ppt模板下载 免费_百度地图下载2022新版安装_广州推广系统

2024/12/23 7:19:13 来源:https://blog.csdn.net/qq_40135848/article/details/144256606  浏览:    关键词:安阳区号查询_无忧ppt模板下载 免费_百度地图下载2022新版安装_广州推广系统
安阳区号查询_无忧ppt模板下载 免费_百度地图下载2022新版安装_广州推广系统

单例模式

  • 一个类仅有一个实例
  • 提供该实例的全局访问点

单线程下的单例模式:

class Singleton{
public:static Singleton * GetInstance(){if(_instance == nullptr){_instance = new Singleton();std::atexit(Destructor);}return _instance;}
private:static void Destructor(){if(_instance != nullptr){delete _instance;_instance = nullptr;}}Singleton() {}~Singleton() {}Singleton(const Singleton &clone) {}Singleton & operator=(const Singleton &) {};static Singleton *_instance;
};
Singleton *Singleton::_instance = nullptr;

1.静态成员函数和静成员变量

2.构造、析构、赋值操作符、拷贝构造私有化

3.new是堆上创建std::atexit

多线程下的单例模式:

#include <mutex>
#include <atomic>
class Singleton{
public:static Singleton * GetInstance(){Singleton *temp = _instance.load(std::memory_order_relaxed);std::atomic_thread_fence(std::memory_order_acquire);//内存栅栏,确保在此点之前的所有读操作都完成,并且在此点之后的所有读操作都不会被重排到这个点之前//std::lock_guard<std::mutex> lock(_mutex);if(_instance == nullptr){std::lock_guard<std::mutex> lock(_mutex);temp = _instance.load(std::memory_order_relaxed);if(_instance == nullptr){temp = new Singleton();//多线程环境下编译器和cpu对程序进行优化std::atomic_thread_fence(std::memory_order_release);_instance.store(temp,std::memory_order_relaxed);//1.分配内存 2.调用构造函数 3.返回指针、赋值运算//优化为1、3、2std::atexit(Destructor);}		}return _instance;}
private:static void Destructor(){Singleton *temp = _instance.load(std::memory_order_relaxed);if(temp != nullptr){delete temp;_instance.store(temp,std::memory_order_relaxed);temp = nullptr;}}Singleton() {}~Singleton() {}Singleton(const Singleton &clone) {}Singleton & operator=(const Singleton &) {};static std::atomic<Singleton *> _instance;static std::mutex _mutex;
};
std::atomic<Singleton *> Singleton::_instance = nullptr;
std::mutex Singleton::_mutex;

1.两次判断,希望在第二次判断的时候加互斥锁

2.多线程环境下,编译器、cpu的优化(指令重排)——原子操作+内存屏障


获取更多Linux C/C++资料

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com