c++带模板的线程安全单例模式

本文介绍了如何在C++中实现一种带模板的线程安全单例模式,通过代码示例展示了三种不同的实现方案,并进行了简单的测试验证。欢迎读者指出可能存在的错误。
摘要由CSDN通过智能技术生成

带模板的线程安全单例模式

代码如下,

#pragma once
#include <atomic>
#include <mutex>

template<typename T>
class Singleton
{
private:
    Singleton();
    Singleton(Singleton&) = delete;
    Singleton(Singleton&&) = delete;
    Singleton& operator = (Singleton const&) = delete;

public:
    // 方案一:太慢了
    //static T* getInstance() {
    //    std::lock_guard<std::mutex> lock(mutex_);
    //    T* ptrSingleton = singleton_.load();
    //    if (nullptr == ptrSingleton) {
    //        T* singleton = new T();
    //        singleton_.store(singleton);
    //        ptrSingleton = singleton_.load();
    //    }
    //    return ptrSingleton;
    //}

    // 方案二:略显复杂
    //static T* getInstance() {
    //    T* ptrSingleto = singleton_.load(std::memory_order_relaxed);
    //    //acquire fence可以防止fence后的内存操作重排到fence前的任意load之前,即阻止loadload重排和loadstor
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值
>