【发布时间】:2012-08-14 05:56:20
【问题描述】:
我正在使用 IPC 构建一个多生产者/单消费者应用程序,使用 Boost.Interprocess 实现。
每个生产者通过在共享内存 (managed_shared_memory::allocate) 中分配一个块并将一个对象编组到该块中来发送消息。然后,它通过message_queue 发送一个小对象,该对象保存块的位置(偏移量)和大小。
消费者receives 这个指示器从队列中解组并解组对象。消费者负责释放内存块。
基于这个实现,我不相信内存中存在的对象或块需要同步,因为一旦消费者知道它们,生产者将不再接触它们。因此,我认为只有message_queue和managed_shared_memory的内部需要同步。
我的问题是:记住每个进程都是单线程的,allocate/deallocate 和send/receive 调用需要同步吗?
文档提供的Boost示例没有使用消息队列的同步,但我认为这只是为了简化示例源。
我见过this question,但它询问的是线程安全,而不是Boost.Interprocess 的这些特定组件。
【问题讨论】:
标签: c++ synchronization ipc boost-interprocess