国产探花免费观看_亚洲丰满少妇自慰呻吟_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; } 

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 乐陵市| 澎湖县| 石台县| 应用必备| 汉寿县| 体育| 田林县| 松桃| 原平市| 深水埗区| 若尔盖县| 蓝山县| 岱山县| 襄樊市| 阜宁县| 林芝县| 新河县| 石狮市| 大足县| 西丰县| 新泰市| 棋牌| 永吉县| 康保县| 苗栗市| 堆龙德庆县| 南雄市| 高邑县| 思南县| 鄂温| 沂源县| 香港 | 武邑县| 南溪县| 寿宁县| 延安市| 谢通门县| 杂多县| 千阳县| 秀山| 高邑县|