单例模式例子

简介: 单例模式例子
#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
相关文章
|
4月前
|
C++
C++实现单例模式-多种方式比较
单例模式,面试中经常被问到,但是很多人只会最简单的单例模型,可能连多线程都没考虑到,本文章从最简单的单例,到认为是最佳的单例模式实现方式,单例模式没有什么知识点,直接上源码
50 0
|
9月前
|
安全 Java 编译器
单例模式的4种实现方式
单例模式的4种实现方式
74 0
|
10月前
|
安全
单例模式的写法
单例模式的写法
|
SQL 设计模式 安全
6. 单例模式有几种写法?
6. 单例模式有几种写法?
84 0
6. 单例模式有几种写法?
|
设计模式
单例模式的懒汉模式为什么在高并发中会出现问题?一个代码例子告诉你
单例模式的懒汉模式为什么在高并发中会出现问题?一个代码例子告诉你
单例模式的懒汉模式为什么在高并发中会出现问题?一个代码例子告诉你
|
缓存
单例模式(5种实现方式)
单例模式(5种实现方式)
112 0
单例模式有哪些实现方式?
单例模式的常用实现方法有4种实现方式:饿汉模式、懒汉模式、静态内部类和枚举。 推荐使用懒汉模式及枚举。 使用单例模式可以避免频繁创建和销毁对象,减少系统资源的消耗。
78 0
|
设计模式
用两个小例子来解释单例模式中的“双重锁定”
学习单例模式时,好多人都不太理解双重锁定。学完后突然想到一个很有趣的例子。
用两个小例子来解释单例模式中的“双重锁定”
|
SQL 设计模式 安全
|
设计模式 安全 Java
单例模式的七种写法,你都知道吗?
单例模式的七种写法,你都知道吗?
169 0
单例模式的七种写法,你都知道吗?