我的任务是在没有大小限制的进程之间创建消息传递队列(最多1 Mb,但大多数消息的大小为128字节)。
所以,我不能使用:
这就是为什么我决定使用 boost :: interproc :: shared_memory_object 。
我打算截断最多1Mb的内存,然后在那里放置任何带有标题的消息,这将定义它的大小或将通知它是最后一条消息。
要写入的函数 - 将锁定已命名的互斥锁,写入堆消息的末尾并移动“last message”标志以显示它。
要读取的函数 - 将锁定它,读取全部并删除,将“完成标志”移动到堆的开头。
看起来不错,但问题是每次我想读/写时都要映射1MB的内存。我担心这可能是长时间的操作。这是真的吗?
如果映射这么大的堆是高成本操作,我该如何解决? 也许没有消息大小限制的interproc消息队列有另一种机制?