我正在开发的模块由几个线程组成(类似于生产者/消费者),它们之间的消息传递是通过 boost::message_queue 发送函数发送生成的对象的地址来完成的。
到目前为止,内存管理是通过在生产者线程中实例化对象并在使用后在消费者线程中删除它来显式完成的。
现在,出于显而易见的原因(控制复杂性并避免泄漏),我计划使用自管理内存(智能指针/Boost共享指针)删除这种显式管理。
我面临的一个问题是 boost::message_queue 发送/接收 api 在其签名中使用原始指针,并且我希望内存在线程之间共享。那么我如何管理引用计数,以便在生产者线程函数的范围结束后,甚至在消费者线程完成其任务之前,消息对象不会立即被销毁?
一种方法是序列化shared_ptr并将其用于在线程之间传递。 我是否缺少更明显的方式?如果我能在这里获得更多选择,那就太好了。提前致谢。
最佳答案
boost::message_queue 更适合进程间通信。如果您只想进行线程间消息传递,我宁愿使用一个简单的队列(具有适当的同步)来保存您的共享指针。
关于c++ - 跨线程的内存管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8132922/