国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

C++實現 單例模式實例詳解

2020-01-26 14:10:11
字體:
來源:轉載
供稿:網友

設計模式之單例模式C++實現

一、經典實現(非線程安全)

class Singleton {   public:     static Singleton* getInstance();   protected:     Singleton(){}   private:     static Singleton *p; };  Singleton* Singleton::p = NULL; Singleton* Singleton::getInstance() {   if (NULL == p)     p = new Singleton();   return p; } 

二、懶漢模式與餓漢模式

懶漢:故名思義,不到萬不得已就不會去實例化類,也就是說在第一次用到類實例的時候才會去實例化,所以上邊的經典方法被歸為懶漢實現;

餓漢:餓了肯定要饑不擇食。所以在單例類定義的時候就進行實例化。

特點與選擇

由于要進行線程同步,所以在訪問量比較大,或者可能訪問的線程比較多時,采用餓漢實現,可以實現更好的性能。這是以空間換時間。在訪問量較小時,采用懶漢實現。這是以時間換空間。

線程安全的懶漢模式

1.加鎖實現線程安全的懶漢模式

class Singleton {   public:     static pthread_mutex_t mutex;     static Singleton* getInstance();   protected:     Singleton()     {       pthread_mutex_init(&mutex);     }   private:     static Singleton* p; };  pthread_mutex_t Singleton::mutex; Singleton* Singleton::p = NULL; Singleton* Singleton::getInstance() {   if (NULL == p)   {     pthread_mutex_lock(&mutex);     if (NULL == p)       p = new Singleton();     pthread_mutex_unlock(&mutex);   }   return p; }

2.內部靜態變量實現懶漢模式

class Singleton {   public:   static pthread_mutex_t mutex;   static Singleton* getInstance();   protected:     Singleton()     {       pthread_mutex_init(&mutex);     } };  pthread_mutex_t Singleton::mutex; Singleton* Singleton::getInstance() {   pthread_mutex_lock(&mutex);   static singleton obj;   pthread_mutex_unlock(&mutex);   return &obj; } 

餓漢模式(本身就線程安全)

class Singleton {   public:     static Singleton* getInstance();   protected:     Singleton(){}   private:     static Singleton* p; };  Singleton* Singleton::p = new Singleton; Singleton* Singleton::getInstance() {   return p; } 

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 福安市| 海晏县| 津市市| 安康市| 武川县| 武隆县| 玉山县| 丰原市| 平乡县| 临桂县| 丰原市| 延寿县| 贵南县| 深水埗区| 虎林市| 宁阳县| 芜湖市| 丹东市| 巴马| 铅山县| 沙雅县| 正安县| 丹阳市| 岗巴县| 清流县| 叶城县| 博客| 景宁| 静海县| 东辽县| 桦甸市| 保德县| 柏乡县| 丹寨县| 新邵县| 临安市| 商城县| 芦山县| 元谋县| 澜沧| 腾冲县|