成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

詳解 Qt 中實現單例模式

移動開發
本文介紹的是Qt 中實現單例模式,由于單例模式很常用,Boost庫中有強大的泛型單例實現,先來看內容。

Qt 中實現單例模式是本文要介紹的內容,不多說,先來看內容。單例模式分為“饑漢”和“餓漢”兩種版本,也正是線程安全問題使得原本簡單的單例模式變得復雜。由于單例模式很常用,Boost庫中有強大的泛型單例實現,我也利用Qt的原子指針QAtomicPointer來實現Qt中的單例模式

  1. //.cpp  
  2. class  
  3.  SingleTon{ public  
  4. :    /*! \brief 用于獲得SingleTon實例,使用單例模式。  
  5.      *  \return SingleTon實例的引用。  
  6.      */  
  7.     static  
  8.  SingleTon &getInstance(void  
  9. )    {        //使用雙重檢測。  
  10.          if  
  11. (!instance)//***次檢測  
  12.         {            QMutexLocker locker(&mutex);//加互斥鎖。  
  13.              if  
  14. (!instance)//第二次檢測。  
  15.                 instance = new 
  16.  SingleTon;        }         return  
  17.  *instance;    } private  
  18. :    SingleTon();//禁止構造函數。  
  19.     SingleTon(const  
  20.  SingleTon &);//禁止拷貝構造函數。  
  21.     SingleTon & operator 
  22. =(const  
  23.  SingleTon &);//禁止賦值拷貝函數。  
  24.      QReadWriteLock internalMutex;//函數使用的讀寫鎖。  
  25.      static  
  26.  QMutex mutex;//實例互斥鎖。  
  27.     static  
  28.  QAtomicPointer<SingleTon> instance;/*!<使用原子指針,默認初始化為0。*/  
  29. };//靜態成員變量初始化。(在.cpp文件中) 

QMutex SingleTon::mutex;QAtomicPointer<SingleTon> SingleTon::instance = 0;

雙重鎖檢測在C++中是安全的,另外提供了讀寫鎖,在修改單例數據的函數中使用寫鎖(QWriteLocker locker(&internalMutex););在讀取單例數據的函數中使用讀鎖(QReadLocker locker(&internalMutex);)。
之前沒考慮到亂序執行問題,并且此前代碼有嚴重BUG,即對QAtomicPointer類型變量賦值操作不是原子操作,見官方文檔:

For convenience, QAtomicPointer provides pointer comparison, cast, dereference, and assignment operators. Note that these operators are not atomic.

修改代碼,使用testAndSetOrdered原子操作,并解決亂序執行問題,testAndSetOrdered特性:

This function uses ordered memory ordering semantics, which ensures that memory access before and after the atomic operation (in program order) may not be re-ordered.

其中關于memory ordering,我轉過此帖:http://www.cnblogs.com/codingmylife/archive/2010/04/28/1722573.html

其中關于double checked locking,有此文:http://docs.huihoo.com/ace_tao/lifecycle.html

修改版SingleTon.cpp:

  1. //.cpp 一次修改版  
  2. class  
  3.  SingleTon{ public  
  4. :    /*! \brief 用于獲得SingleTon實例,使用單例模式。  
  5.      *  \return SingleTon實例的引用。  
  6.      */  
  7.     static  
  8.  SingleTon &getInstance(void  
  9. )    { #ifndef  
  10.  Q_ATOMIC_POINTER_TEST_AND_SET_IS_ALWAYS_NATIVE        if  
  11. (!QAtomicPointer::isTestAndSetNative())//運行時檢測  
  12.             qDebug() << "Error: TestAndSetNative not supported!"  
  13. ;#endif  
  14.          //使用雙重檢測。  
  15.          /*! testAndSetOrders操作保證在原子操作前和后的的內存訪問  
  16.          * 不會被重新排序。  
  17.          */  
  18.         if  
  19. (instance.testAndSetOrdered(0, 0))//***次檢測  
  20.         {            QMutexLocker locker(&mutex);//加互斥鎖。  
  21.              instance.testAndSetOrdered(0, new  
  22.  SingleTon);//第二次檢測。  
  23.         }         return  
  24.  *instance;    } private  
  25. :    SingleTon();//禁止構造函數。  
  26.     SingleTon(const  
  27.  SingleTon &);//禁止拷貝構造函數。  
  28.     SingleTon & operator 
  29. =(const  
  30.  SingleTon &);//禁止賦值拷貝函數。  
  31.      QReadWriteLock internalMutex;//函數使用的讀寫鎖。  
  32.      static  
  33.  QMutex mutex;//實例互斥鎖。  
  34. static  
  35.  QAtomicPointer<SingleTon> instance;/*!<使用原子指針,默認初始化為0。*/  
  36. }; 

小結:詳解Qt 中實現單例模式的內容介紹完了,希望本文對你有幫助!

責任編輯:zhaolei 來源: 互聯網
相關推薦

2013-03-26 10:35:47

Objective-C單例實現

2021-07-27 07:31:16

單例模式關鍵字

2010-02-05 17:00:06

C++單例模式

2024-03-06 13:19:19

工廠模式Python函數

2021-02-01 10:01:58

設計模式 Java單例模式

2021-03-02 08:50:31

設計單例模式

2022-09-29 08:39:37

架構

2010-02-03 09:43:16

C++單例模式

2022-08-10 11:02:56

Python單例模式

2016-03-28 10:23:11

Android設計單例

2013-11-26 16:20:26

Android設計模式

2021-09-07 10:44:35

異步單例模式

2011-06-28 15:01:01

Qt PIMPL

2021-02-07 23:58:10

單例模式對象

2011-03-16 10:13:31

java單例模式

2022-02-06 22:30:36

前端設計模式

2022-06-07 08:55:04

Golang單例模式語言

2023-12-05 08:20:05

單例模式Python

2010-02-06 13:42:36

C++單件模式

2015-09-06 11:07:52

C++設計模式單例模式
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 91精品久久久久久久久中文字幕 | 亚洲欧美一区二区三区国产精品 | 精品日韩一区二区 | 日韩精品久久久久 | 91传媒在线观看 | 欧美一级久久久猛烈a大片 日韩av免费在线观看 | 亚洲精品久久久久久首妖 | 日韩精品一区二区三区 | av看片网站 | 免费观看日韩精品 | 天天躁日日躁狠狠躁白人 | 欧美激情综合 | 国产色婷婷久久99精品91 | 成人免费日韩 | 国产精品夜夜春夜夜爽久久电影 | 毛片免费观看视频 | 神马久久久久久久久久 | 日本在线视频不卡 | 国产视频精品区 | 91精品久久久久 | 国产精品视频在线观看 | 久久av一区 | 国产乱码精品一区二区三区av | 亚洲欧美在线一区 | 国产日韩欧美在线观看 | 欧美日韩亚洲一区 | 成人精品久久日伦片大全免费 | 国产一区二区高清在线 | 韩日av在线 | 精品国产一区二区三区性色av | 日韩福利在线观看 | 久久久久久国产 | 亚洲久草 | www.日日夜夜 | 久久久精品一区 | 国产精品久久久久久久久图文区 | 国产在线观看av | 黄网站在线观看 | 欧美日韩综合视频 | 亚洲精品国产精品国自产在线 | 伊人精品国产 |