Qt 筆記 執行緒的生命期問題

2021-08-28 22:51:04 字數 808 閱讀 6491

c++物件有宣告週期;

執行緒也有宣告週期;

qthread物件的生命週期與對應的執行緒宣告週期是否一致?

執行緒物件生命週期  >  對應的執行緒宣告週期

同步型執行緒設計

-概念·執行緒物件主動等待執行緒生命期結束後才銷毀

-特點·同時支援棧和堆中建立執行緒物件

·物件銷毀時確保執行緒生命期結束

-要點·在析構函式中先呼叫wait()函式,強制等到執行緒執行結束

-使用場合

·執行緒生命期相對較短的情形

functhread::~functhread()

非同步型執行緒設計

-概念·執行緒生命期結束時通知銷毀執行緒物件

-特點·只能在堆中建立執行緒物件

·執行緒物件不能被外界主動銷毀

-要點·在run() 中最後呼叫deletelater() 函式

·執行緒體函式主動申請銷毀執行緒物件

-使用場合

·執行緒生命期不可控,需要長時間執行於後台的情形

void functhread::run()

deletelater();

}

總結:

執行緒物件生命期必須大於對應執行緒生命期

-同步型執行緒設計-->執行緒生命期較短

-非同步型執行緒設計-->執行緒生命期不可控

-執行緒類的設計必須適應具體的場合

-沒有萬能的設計,只有合適的設計

執行緒的生命期設計例項

執行緒安全的物件生命期管理

1.當析構函式遇到多執行緒 在即將析構乙個物件時,別的執行緒是否正在執行該物件的成員函式?如何保證在執行成員函式期間,物件不在另乙個執行緒被析構?在呼叫某個成員函式之前,如何確保物件還活著?析構函式會不會執行到一半?1.1執行緒安全類 多個執行緒同時訪問,表現出正確的行為 無論作業系統如何排程這些執...

muduo 執行緒安全的物件生命期管理

六 系統地避免各種指標錯誤 七 shared ptr 技術與陷阱 八 小結 當乙個物件能被多個執行緒同時看到時,那麼物件的銷毀時機就會變得模糊不清,可能出現多種競態條件 race condition 解決這些race condition是 c 多執行緒程式設計面臨的基本問題。本文試圖以shared ...

執行緒安全的物件生命期管理(三)

c 裡可能出現的記憶體問題大致有這麼幾個方面 1 緩衝區溢位 2 空懸指標 野指標 3 重複釋放 4 記憶體洩漏 5 不配對的new delete 6 記憶體碎片 正確使用智慧型指標能很容易地解決前面5個問題。1 緩衝區溢位 用vector string或自己編寫buffer class來管理緩衝區...