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

解析 QT 多線程程序之可重入與線程安全 中篇

移動開發
在一個程序中,這些獨立運行的程序片斷叫作“線程”(Thread),利用它編程的概念就叫作“多線程處理”。多線程處理一個常見的例子就是用戶界面。

QT 多線程程序之可重入與線程安全 是本節要介紹的內容,繼續著 解析 QT 多線程程序詳細設計 上篇 ,開始介紹。先來看內容。

Qt文檔中,術語“可重入”與“線程安全”被用來說明一個函數如何用于多線程程序。假如一個類的任何函數在此類的多個不同的實例上,可以被多個線程同時調用,那么這個類被稱為是“可重入”的。假如不同的線程作用在同一個實例上仍可以正常工作,那么稱之為“線程安全”的。

大多數c++類天生就是可重入的,因為它們典型地僅僅引用成員數據。任何線程可以在類的一個實例上調用這樣的成員函數,只要沒有別的線程在同一個實例上調用這個成員函數。舉例來講,下面的Counter 類是可重入的:

  1. class Counter{public:      Counter() {  
  2. n=0;  
  3. }   
  4.      void increment() {  
  5. ++n;  
  6. }  
  7.       void decrement() {  
  8. --n;  
  9. }  
  10.       int value() const {  
  11. return n;  
  12. }private:      int n;  
  13. }; 

這個類不是線程安全的,因為假如多個線程都試圖修改數據成員 n,結果未定義。這是因為c++中的++和--操作符不是原子操作。實際上,它們會被擴展為三個機器指令:

1,把變量值裝入寄存器

2,增加或減少寄存器中的值

3,把寄存器中的值寫回內存

假如線程A與B同時裝載變量的舊值,在寄存器中增值,回寫。他們寫操作重疊了,導致變量值僅增加了一次。很明顯,訪問應該串行化:A執行123步驟時不應被打斷。使這個類成為線程安全的最簡單方法是使用QMutex來保護數據成員:

  1. class Counter{public:     Counter() {  
  2.  n = 0;  
  3.  }  
  4.      void increment() {  
  5.  QMutexLocker locker(&mutex); ++n;  
  6.  }   
  7.     void decrement() {  
  8.  QMutexLocker locker(&mutex);  
  9.  --n;  
  10.  }   
  11.     int value() const {  
  12.  QMutexLocker locker(&mutex);  
  13.  return n;  
  14.  }private:     mutable QMutex mutex;  
  15.      int n;  
  16. }; 

QMutexLocker類在構造函數中自動對mutex進行加鎖,在析構函數中進行解鎖。隨便一提的是,mutex使用了mutable關鍵字來修飾,因為我們在value()函數中對mutex進行加鎖與解鎖操作,而value()是一個const函數。

大多數Qt類是可重入,非線程安全的。有一些類與函數是線程安全的,它們主要是線程相關的類,如QMutex,QCoreApplication::postEvent()。

線程與QObjects

QThread 繼承自QObject,它發射信號以指示線程執行開始與結束,而且也提供了許多slots。更有趣的是,QObjects可以用于多線程,這是因為每個線程被允許有它自己的事件循環。

小結:QT 多線程程序之可重入與線程安全的內容介紹完了,希望本文能夠對你有所幫助,如果你對本文感興趣或者需要獲得更多的資料,請參考

解析QT多線程程序詳細設計之QObject可重入性 下篇 。

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

2011-06-22 16:02:37

Qt 多線程 重入

2011-06-22 14:47:51

QT 多線程 QObject

2017-03-08 16:25:54

Linux多線程函數

2011-06-22 14:30:44

QT 多線程 線程

2011-06-24 11:03:31

Qt 多線程 線程

2011-06-24 11:12:39

Qt 多線程 線程

2022-05-26 08:31:41

線程Java線程與進程

2009-07-03 16:53:11

Servlet容器

2009-03-12 10:52:43

Java線程多線程

2011-06-22 16:18:23

QT 多線程 QSocket

2011-06-02 17:27:49

iphone 多線程

2011-04-18 09:22:38

多線程

2011-06-22 16:08:40

Qt 多線程 事件循環

2023-06-07 13:49:00

多線程編程C#

2011-06-22 15:50:45

QT 線程

2011-06-13 10:03:19

Qt 多線程 編程

2012-06-20 14:07:28

多線程架構單線程

2024-02-27 10:44:58

C#線程后端

2011-06-13 10:41:17

JAVA

2012-04-16 10:12:54

Java線程
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 一区二区三区免费观看 | 2019天天操| 91一区 | 国产精品一级在线观看 | 日本又色又爽又黄的大片 | 亚洲美女网站 | 手机看片在线播放 | 久久久999精品 | 久久亚洲欧美日韩精品专区 | 午夜精品一区二区三区免费视频 | 99re国产精品 | 一级黄色日本片 | 日韩精品久久久久 | 精品精品视频 | 人人艹人人爽 | 成人性视频免费网站 | 人人人人干 | 国产精品视频播放 | 国色天香成人网 | 欧美黄色一区 | 国产伦一区二区三区久久 | 精品国产伦一区二区三区观看方式 | 国产jizz女人多喷水99 | 久久久久国产精品免费免费搜索 | 久久婷婷国产麻豆91 | 中文字幕av在线播放 | 免费在线看黄 | 国产精品九九九 | 九九热精品视频 | 羞羞网站在线观看 | 亚洲国产一区二区视频 | 一级片免费在线观看 | 国产精品视频网站 | 国产精品久久久久久久岛一牛影视 | 99精品国产一区二区青青牛奶 | 99久久国产综合精品麻豆 | 中文字幕成人网 | 欧美亚洲网站 | 999精品在线观看 | 国产探花在线观看视频 | 91影视 |