单例模式例子

简介: 单例模式例子
#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
相关文章
|
1月前
|
设计模式 安全
单例模式的几种写法
【10月更文挑战第10天】
94 61
|
安全
单例模式的写法
单例模式的写法
|
安全 Java
单例模式的8种写法
单例模式的8种写法
113 0
单例模式的8种写法
|
SQL 设计模式 安全
6. 单例模式有几种写法?
6. 单例模式有几种写法?
103 0
6. 单例模式有几种写法?
|
设计模式
单例模式的懒汉模式为什么在高并发中会出现问题?一个代码例子告诉你
单例模式的懒汉模式为什么在高并发中会出现问题?一个代码例子告诉你
100 0
单例模式的懒汉模式为什么在高并发中会出现问题?一个代码例子告诉你
|
设计模式 安全 算法
单例模式的十种写法,你会几个?
单例模式是一种最常见的设计模式,写法也比较多,在这篇文章里面主要是对单例模式的各种写法进行一个介绍。面试的时候会对其中两三种进行体会,而且我还遇到了口述单例模式的例子。重要性就不言而喻了吧。
196 0
单例模式的十种写法,你会几个?
|
设计模式
用两个小例子来解释单例模式中的“双重锁定”
学习单例模式时,好多人都不太理解双重锁定。学完后突然想到一个很有趣的例子。
用两个小例子来解释单例模式中的“双重锁定”
|
SQL 设计模式 安全
|
设计模式 安全 Java
单例模式的七种写法,你都知道吗?
单例模式的七种写法,你都知道吗?
192 0
单例模式的七种写法,你都知道吗?
|
安全 Java 容器
单例模式的 8 种写法,整理非常全!
单例模式即一个 JVM 内存中只存在一个类的对象实例。
单例模式的 8 种写法,整理非常全!