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

2022-06-20 15:27:14 字數 992 閱讀 1618

1.當析構函式遇到多執行緒

①在即將析構乙個物件時,別的執行緒是否正在執行該物件的成員函式?

②如何保證在執行成員函式期間,物件不在另乙個執行緒被析構?

③在呼叫某個成員函式之前,如何確保物件還活著?析構函式會不會執行到一半?

1.1執行緒安全類

①多個執行緒同時訪問,表現出正確的行為

②無論作業系統如何排程這些執行緒,無論這些執行緒執行順序如何交織

③呼叫端**無需額外的同步

鎖一般是棧上物件,只需要臨界區加鎖即可,解鎖正好等於其作用域

物件構造要執行緒安全,唯一要求在構造期間不要洩露指標(建構函式執行期間物件還沒有完成初始化,如果洩露給其它物件,顯而易見可能會更改)

1.2作為資料成員的mutexlock只能同步保護class其它資料成員的讀寫,不能保證安全析構,因為mutexlock成員生命期最多與物件一樣長,而析構可能發生在物件釋放之後

1.3判斷乙個指標是不是合法指標沒有高效的辦法,這是c/c++指標問題的根源

物件的關係主要有三種:composition、aggregation、association

1.composition:物件x的生命期由其owner控制,x是owner的直接資料成員,或者是owner持有的容器元素

2.association 、aggregation:a持有b的指標或引用,但是b的生命期不由a控制

c++可能出現的記憶體問題:

①緩衝區溢位

②空懸指標/野指標

③重複釋放

④記憶體洩漏

⑤不配的new/delete

⑥記憶體碎片

用流水線、生產者消費者,任務佇列這些有規律的機制,最低限度共享資料,是多執行緒程式設計最好的建議

1.原始指標暴露給多個執行緒會造成race condition

2.統一使用shared_ptr/scoped_ptr管理生命期,在多執行緒中尤其重要

3.shared_ptr是值語意,當心意外延遲物件生命期

4.weak_ptr可以用作若**、物件池

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

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

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

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

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

物件池 舉例 class stockfactory boost noncopyable 這段 中有乙個問題,stock物件永遠不會被銷毀,因為map裡存的是shared ptr,那就改為weak ptr class stockfactory boost noncopyable shared ptrs...