【发布时间】:2011-11-15 07:33:56
【问题描述】:
我正在开发的模块由几个线程组成(类似于生产者/消费者),它们之间的消息传递是通过 boost::message_queue 发送函数发送生产对象的地址来完成的。
到目前为止,内存管理是通过在生产者线程中实例化对象并在使用后在消费者线程中将其删除来显式完成的。
现在,出于显而易见的原因(控制复杂性和避免泄漏),我计划使用自我管理的内存(智能指针/boost shared_ptr)删除这种显式管理。
我面临的一个问题是 boost::message_queue 发送/接收 api 在其签名中使用原始指针,我希望跨线程共享内存。那么如何管理引用计数,以便消息对象不会在生产者线程函数的范围结束后立即销毁,甚至在消费者线程完成其任务之前?
一种方法是让 shared_ptr 序列化并使用它在线程之间传递。 有没有更明显的方式我错过了?如果我能在这里找到更多的选择,那就太好了。提前致谢。
【问题讨论】:
标签: c++ boost shared-ptr