C++-饿汉式声明(单例声明)和懒汉式声明(单例声明 线程thread)

2021-01-24 10:14

阅读:499

标签:static   thread   stat   initial   class   开始   null   std   let   

饿汉式声明, 一开始的时候对单例进行声明

#include using namespace std; 

class Singleton{ 
public:
    static Singleton& getInstance(void){
        return s_instance;
    }
    void print(void) {
        coutendl;
    }

private:
    Singleton(int data = 0):m_data(data){
        cout "单例被创建"  endl;     
    }; 
    Singleton(const Singleton&); 
    int m_data; 
    static Singleton s_instance; 
}; 

Singleton Singleton::s_instance = 123; 

int main(void){
    Singleton& s1 = Singleton::getInstance(); 
    Singleton& s2 = Singleton::getInstance(); 
    Singleton& s3 = Singleton::getInstance(); 
    
    cout  endl; 
    cout  endl; 
    cout  endl; 
    return 0; 
}

懒汉式声明, 在进行调用的时候进行声明,这里使用了线程里的互斥锁

#include using namespace std; 


class Singleton{
public:
    static Singleton& getInstance(void){
        pthread_mutex_lock(&mutex);
        if(s_instance == NULL){
            s_instance = new Singleton(123);          
        }
        ++s_count; 
        pthread_mutex_unlock(&mutex); 
        return *s_instance;
    }
    //所有的使用者都不用再销毁 
    void release(void) {
        pthread_mutex_lock(&mutex); 
        if (--s_count == 0){
            delete s_instance;
            s_instance = NULL; 
        }  
        pthread_mutex_unlock(&mutex); 
    }
    //单列对象不用销毁 
    void print(void) {
        cout  endl; 
    }
private:
    Singleton(int data=0):m_data(data){
        cout "创建单例"  endl; 
    } 
    Singleton(const Singleton&); 
    ~Singleton(void){
        cout "单例被删除"  endl; 
    }
    int m_data; 
    static Singleton* s_instance; 
    static int s_count; 
    static pthread_mutex_t mutex;  
};     

Singleton* Singleton::s_instance = NULL;//进行私有化的生成操作 
int Singleton::s_count = 0;
//互斥锁定义和初始化  
pthread_mutex_t Singleton::mutex = PTHREAD_MUTEX_INITIALIZER; 

int main() {
    Singleton& s1 = Singleton::getInstance(); 
    Singleton& s2 = Singleton::getInstance(); 
    Singleton& s3 = Singleton::getInstance(); 
    
    cout "&s1"  endl; 
    cout "&s2"  endl; 
    cout "&s3"  endl; 
    
    s1.print(); 
    s1.release(); 
    
    s2.print(); 
    s2.release(); 
    
    s3.print(); 
    s3.release(); 

}

 

C++-饿汉式声明(单例声明)和懒汉式声明(单例声明 线程thread)

标签:static   thread   stat   initial   class   开始   null   std   let   

原文地址:https://www.cnblogs.com/hyq-lst/p/12866269.html


评论


亲,登录后才可以留言!