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

2021-09-18 07:36:39 字數 768 閱讀 1028

物件池

舉例:

class stockfactory : boost::noncopyable

;

這段**中有乙個問題,stock物件永遠不會被銷毀,因為map裡存的是shared_ptr,那就改為weak_ptr:

class stockfactory : boost::noncopyable

;shared_ptrstockfactory::get(const string& key)

return pstock;

}

解決了物件不銷毀的問題,但是程式有輕微的記憶體洩漏,因為map大小只增不減。

針對這個問題,可以利用shared_ptr的定製析構功能。shared_ptr的額外模板型別引數可以傳入乙個函式指標或仿函式,在析構時就可以執行該函式來達到目的。

templateshared_ptr::shared_ptr(y* p,d d);

templateshared_ptr::reset(y* p,d d);

class stockfactory : boost::noncopyable

delete stock;

}};shared_ptrstockfactory::get(const string& key)

return pstock;

}

這樣就做到了在析構stock物件的同時將對應的map中的變數也刪除。這裡暴露了this指標會有執行緒安全問題,在後面解決。

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

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來管理緩衝區...