单例模式例子

简介: 单例模式例子
#pragma once
#include <atomic>
#include <mutex>
namespace sinftech {
template<typename T>
class Singleton {
public:
  static T* get() {
    T* tmp = _instance.load(std::memory_order_relaxed);
    std::atomic_thread_fence(std::memory_order_acquire);
    if(tmp == nullptr) {
      std::lock_guard<std::mutex> lock(_mutex);
      tmp = _instance.load(std::memory_order_relaxed);
      if(tmp == nullptr) {
        tmp = new T;
        std::atomic_thread_fence(std::memory_order_release);
        _instance.store(tmp, std::memory_order_relaxed);
      }
    }
    return tmp;
  }
  static void destroy() {
    T* tmp = _instance.exchange(nullptr, std::memory_order_relaxed);
    delete tmp;
  }
private:
  Singleton() {}
  ~Singleton() {}
  static std::atomic<T*> _instance;
  static std::mutex _mutex;
};
template<typename T>
std::atomic<T*> Singleton<T>::_instance;
template<typename T>
std::mutex Singleton<T>::_mutex;
}//namespace sinftech
相关文章
|
5月前
|
设计模式 安全
单例模式的几种写法
【10月更文挑战第10天】
108 61
|
安全
单例模式的写法
单例模式的写法
|
安全 Java
单例模式的8种写法
单例模式的8种写法
147 0
单例模式的8种写法
|
SQL 设计模式 安全
6. 单例模式有几种写法?
6. 单例模式有几种写法?
138 0
6. 单例模式有几种写法?
|
设计模式
单例模式的懒汉模式为什么在高并发中会出现问题?一个代码例子告诉你
单例模式的懒汉模式为什么在高并发中会出现问题?一个代码例子告诉你
118 0
单例模式的懒汉模式为什么在高并发中会出现问题?一个代码例子告诉你
|
Java
Java内部类大全(含代码例子)
写在一个类里面的类就叫内部类
110 0
|
设计模式
用两个小例子来解释单例模式中的“双重锁定”
学习单例模式时,好多人都不太理解双重锁定。学完后突然想到一个很有趣的例子。
用两个小例子来解释单例模式中的“双重锁定”
|
SQL 设计模式 安全
|
设计模式 安全 Java
单例模式的七种写法,你都知道吗?
单例模式的七种写法,你都知道吗?
206 0
单例模式的七种写法,你都知道吗?
|
安全 Java
单例模式的N种写法
1.前言 写完这个题目,我感觉自己好像"孔乙己"啊,回字的四种写法要不要学啊~ 我们经常会用到单例模式,但是我对他一直没有一个统一的的认识,比如我清楚好多种单例的写法,但是每一种是怎么演化来的?具体解决了什么问题?这块就没有那么清晰了,因此此文对单例模式进行一个总结,同时手撸一下代码加深理解.
1287 0