2009-05-26 74 views
0

假設我有一個守護進程,它通過共享內存將它的內部狀態分享給各種應用程序。進程可以將IPC消息發送到命名管道上的守護進程以執行各種操作。在這種情況下,我想爲客戶端創建一個C++包裝類,作爲一種「遠程代理」來隱藏客戶端的一些血腥細節(同步,消息傳遞等),並且更容易將代碼單元測試。在C++中使用共享內存的遠程代理

我有三個問題:

  • 一般情況下,這是一個好主意/方法嗎?
  • 在這個設置中您是否有任何提示或同步問題,或者是否足夠使用標準的讀寫器互斥體設置?
  • 我應該考慮哪些框架?

有問題的目標是嵌入式Linux系統的2.18內核,因此存在內存和編譯器功能的限制。

回答

2

香草薩特有一篇文章Sharing Is the Root of All Contention,我廣泛同意;如果你使用的是共享內存體系結構,那麼你將面臨相當多的潛在線程問題。

客戶端/服務器模型可以使事情變得非常簡單,其中客戶端寫入命名服務器管道,服務器回寫到唯一客戶端管道(或使用套接字)。這也將使單元測試更簡單(因爲您不必擔心測試共享內存),可以避免混亂等。

+0

當然,我完全同意這個觀點。我認爲,製作代理班將是朝這個方向邁出的第一步。一旦訪問被隱藏到客戶端,看起來移動到另一個共享機制會更容易。 – mikelong 2009-05-26 21:00:58