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