C++ 中具有共享内存的远程代理

Posted

技术标签:

【中文标题】C++ 中具有共享内存的远程代理【英文标题】:Remote proxy with shared memory in C++ 【发布时间】:2009-05-26 19:28:53 【问题描述】:

假设我有一个守护进程,它通过共享内存将其内部状态共享给各种应用程序。进程可以将 IPC 消息发送到命名管道上的守护进程以执行各种操作。在这种情况下,我想为客户端创建一个 C++ 包装类,它充当一种“远程代理”,以隐藏客户端的一些血腥细节(同步、消息传递等),并更容易隔离代码单元测试。

我有三个问题:

一般来说,这是一个好主意/方法吗? 对于此设置中的同步,您有任何提示或陷阱,或者使用标准的读写器互斥设置就足够了吗? 我应该考虑哪些框架?

所讨论的目标是具有 2.18 内核的嵌入式 linux 系统,因此在内存和编译器功能方面存在限制。

【问题讨论】:

【参考方案1】:

Herb Sutter 有一篇文章Sharing Is the Root of All Contention 我大体同意;如果您使用的是共享内存架构,那么您将面临很多潜在的线程问题。

客户端/服务器模型可以使事情变得非常简单,客户端写入指定的服务器管道,服务器在唯一的客户端管道上写回(或使用套接字)。它还将使单元测试更简单(因为您不必担心测试共享内存),可以避免互斥等。

【讨论】:

当然,我完全同意这个观点。我认为制作代理类将是朝着这个方向迈出的良好的第一步。一旦对客户隐藏了访问权限,似乎转移到另一种共享机制会容易得多。【参考方案2】:

有 Boost.Interprocess 库,但我无法评论它是否适合嵌入式系统。

【讨论】:

以上是关于C++ 中具有共享内存的远程代理的主要内容,如果未能解决你的问题,请参考以下文章

C++ 线程之间的内存共享

c++共享内存(转载)

使用命名共享内存的 C++ 问题

在 C/C++ 共享内存中等待和通知

c++和c#之间的共享内存同步

无法释放 C++ 中 CreateFileMapping 和 MapViewOfFile 创建的共享内存