我正在使用的模塊由幾個線程(類似於生產者/消費者)組成,它們之間的消息傳遞是通過發送生成的對象的地址通過boost :: message_queue發送函數完成的。跨線程的內存管理
到目前爲止,內存管理是通過實例化生產者線程中的對象並在用戶線程中將其刪除後顯式地完成的。
由於顯而易見的原因(控制複雜性並避免泄漏),現在我計劃使用自管理內存(智能指針/ boost shared_ptr)刪除此顯式管理。
我面臨的一個問題是boost :: message_queue發送/接收api在其簽名中使用原始指針,我希望跨線程共享內存。那麼,我如何管理引用計數,以便在生產者線程函數的作用域結束之後消息對象不會立即被銷燬,而且甚至在消費者線程完成其任務之前也不會被銷燬。
一種方法是獲取shared_ptr序列化並用它在線程之間傳遞。 有什麼更明顯的方式,我失蹤了?如果我能在這裏獲得更多選擇,那將是非常好的。提前致謝。
特別是,對於替代品,我建議看看TBB:Intel的線程構建模塊庫。 –