2009-05-26 73 views
0

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

我有三个问题:

  • 一般情况下,这是一个好主意/方法吗?
  • 在这个设置中您是否有任何提示或同步问题,或者是否足够使用标准的读写器互斥体设置?
  • 我应该考虑哪些框架?

有问题的目标是嵌入式Linux系统的2.18内核,因此存在内存和编译器功能的限制。

回答

2

香草萨特有一篇文章Sharing Is the Root of All Contention,我广泛同意;如果你使用的是共享内存体系结构,那么你将面临相当多的潜在线程问题。

客户端/服务器模型可以使事情变得非常简单,其中客户端写入命名服务器管道,服务器回写到唯一客户端管道(或使用套接字)。这也将使单元测试更简单(因为您不必担心测试共享内存),可以避免混乱等。

+0

当然,我完全同意这个观点。我认为,制作代理班将是朝这个方向迈出的第一步。一旦访问被隐藏到客户端,看起来移动到另一个共享机制会更容易。 – mikelong 2009-05-26 21:00:58