单例模式例子

简介: 单例模式例子
#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
相关文章
|
23天前
|
设计模式 安全
单例模式的几种写法
【10月更文挑战第10天】
93 61
|
安全
单例模式的写法
单例模式的写法
|
安全 Java
单例模式的8种写法
单例模式的8种写法
112 0
单例模式的8种写法
|
SQL 设计模式 安全
6. 单例模式有几种写法?
6. 单例模式有几种写法?
103 0
6. 单例模式有几种写法?
|
设计模式
单例模式的懒汉模式为什么在高并发中会出现问题?一个代码例子告诉你
单例模式的懒汉模式为什么在高并发中会出现问题?一个代码例子告诉你
100 0
单例模式的懒汉模式为什么在高并发中会出现问题?一个代码例子告诉你
|
设计模式
用两个小例子来解释单例模式中的“双重锁定”
学习单例模式时,好多人都不太理解双重锁定。学完后突然想到一个很有趣的例子。
用两个小例子来解释单例模式中的“双重锁定”
|
SQL 设计模式 安全
|
设计模式 安全 Java
单例模式的七种写法,你都知道吗?
单例模式的七种写法,你都知道吗?
190 0
单例模式的七种写法,你都知道吗?
|
设计模式 存储 安全
java设计模式之单例模式的5种写法
饱汉模式(懒汉模式) 1 // 饱汉 2 // UnThreadSafe 3 public class Singleton1 { 4 private static Singleton1 singleton = null; 5 private Singleton1() { 6 .
819 0