跨執行緒的訊號-槽qobject和所有它的子類是非執行緒安全的。這包括整個的事件投遞系統。需要牢記的是,當你正從別的執行緒中訪問物件時,事件迴圈可以向你的qobject子類投遞事件。假如你呼叫乙個不生存在當前執行緒中的qobject子類的函式時,你必須用mutex來保護qobject子類的內部資料,否則會遭遇災難或非預期結果。像其它的物件一樣,qthread物件生存在建立它的那個執行緒中---不是當qthread::run()被呼叫時建立的那個執行緒。一般來講,在你的qthread子類中提供slots是不安全的,除非你用mutex保護了你的成員變數。
另一方面,你可以安全的從qthread::run()的實現中發射訊號,因為訊號發射是執行緒安全的。
大部分函式是非安全函式,執行緒涉及到互相訪問**鎖,否則會出現災難性故障。
其他文章:繼承qobject建立多執行緒例項
以下文章均為作者原創文章,看完記得收藏、關注加?
執行緒、程序、多執行緒、執行緒池一文看懂從此秒變大佬!:
qt 初識執行緒(簡單實現):
qt qmutex使用詳解:
qt 執行緒之qsemaphore(深入理解):
qt執行緒 emit、sgnals、slot詳細解釋:
qt 執行緒之qwaitcondition(深入理解):
qt 多執行緒之執行緒事件迴圈(深入理解):
qt執行緒之qobjects(深入理解):
qt執行緒之可重入與執行緒安全(深入理解):
qt 主線程子執行緒互相傳值:
qt執行緒同步與非同步處理:
qt 多執行緒之執行緒池qthreadpool(深入理解):
qt 隱式共享機制對stl樣式迭代器的影響:
QT 執行緒之 moveToThread()
直接進入主題 基本用法,新建乙個widget類 父類無要求 在此基礎上新建乙個testthread 必須繼承自 qobject 在widget類建構函式裡做如下處理 m testthread new testthread m thread new qthread m testthread movet...
Qt 多執行緒之 std thread 一
不時見到有人會這樣做 那麼,如何使用pthread,而又使用qt提供的執行緒間機制呢?本文的初衷源於此,但是使用的的是c 0x 的 std thread,而不是直接使用unix的pthread。既然用qt,還是盡量保證誇平台吧 不想寫太多的文字,還是用乙個乙個的小例子來說話吧。int main in...
Qt多執行緒之死鎖
目錄 一 造成死鎖的原因 現象分析 二 死鎖的概念和發生條件 三 死鎖的避免 四 避免死鎖的示例 一般性原則,每個臨界資源都需要乙個執行緒鎖來進行保護,假設有多個執行緒鎖該怎麼設計程式呢?先來看以下的乙個示例 很簡單就不加注釋了 qmutex g mutex 1 qmutex g mutex 2 c...