设计模式 - SingleToned单例模式

来源:互联网 发布:买衣服 知乎 编辑:程序博客网 时间:2024/06/08 13:54

1. 简单描述

单例模式保证了一个类(在同一进程中)只有一个实例。
单例模式有多种形式:懒汉(又分为线程安全,线程不安全)在第一次使用时创建实例;饿汉(线程安全)在第一次使用前就创建了实例;双重检测则类似线程安全的懒汉模式,在加锁前多加一次指针判空提高效率。

2.实例程序(双重检测)

#include <iostream>#include "AutoLock.h"using namespace std;class SingleTone{public:    static SingleTone* getInstance();    void func();private:    SingleTone(){};    SingleTone(const SingleTone&){};    ~SingleTone(){};private:    static SingleTone* m_instancePtr;    static pthread_mutex_t m_mutex;};SingleTone* SingleTone::m_instancePtr = NULL;pthread_mutex_t SingleTone::m_mutex = PTHREAD_MUTEX_INITIALIZER;SingleTone* SingleTone::getInstance(){    if (NULL == m_instancePtr)    {        AutoLock __lock(&m_mutex);        if (NULL == m_instancePtr)        {            cout<<"create."<<endl;            m_instancePtr = new SingleTone();        }    }    return m_instancePtr;}void SingleTone::func(){    cout<<"succeed !"<<endl;}int main(int argc, char const *argv[]){    /* code */    SingleTone* stPtr = SingleTone::getInstance();    if (NULL == stPtr)    {        cout<<"error"<<endl;        return -1;    }    stPtr->func();    return 0;}



程序中使用了AutoLock进行加锁,简单的AutoLock实现可以参考另一篇文章 <简单的AutoLock>。


0 0
原创粉丝点击