2012-03-13 27 views
1

那一定是直線前進的答案,但我還沒有發現任何地方怎麼辦呢?寫作來提高共享存儲

我已經成功地創建使用Boost IPC系統共享內存段作爲例子:

boost::interprocess::managed_shared_memory segment(boost::interprocess::create_only, "MySharedMemory", 65536); 

sharedData = segment.construct<MyType>("Test")(0, 0.2); 

我也能夠從一個不同的進程讀取的值。我無法理解的是如何編輯這個變量的值(如果允許我將「Test」作爲變量調用)並從另一個進程中讀取它們。我想要一個循環並寫出這些值。

謝謝

回答

2

這不是一個好主意,因爲沒有一個共享內存塊上執行併發的方式。以同樣的方式,共享資源需要被保護以免多個線程相互崩潰(例如,通過互斥或關鍵部分),對於共享內存塊也是如此。

沒有使用類似的命名管道額外的信令機制,不存在安全信令共享內存塊是

  • 可供閱讀的方式
  • 可寫
  • 更新

如果使用read_write標誌創建內存塊,它將設置正確的Windows權限。 boost documentation中的示例顯示了這一點。

using boost::interprocess; 
shared_memory_object shm_obj 
    (open_only     //only open 
    ,"shared_memory"    //name 
    ,read_write     //read-write mode 
    ); 
+0

我不需要它爲時間關鍵的應用程序。我將每秒最多更新10次。我不指望會出現問題,還是會出現問題? – gpierris 2012-03-13 15:37:25

+1

一個應用程序如何知道對方何時開始或完成了閱讀或寫作?你很快就會遇到問題。 – Konrad 2012-03-13 15:43:17

+0

是的,你是對的。我想我已經去過那裏了。我希望提升能夠處理這些問題。我也嘗試使用read_write方式,但是我無法在Ubuntu下進行編譯。無論如何,Thx爲您的評論。 – gpierris 2012-03-13 15:54:11

1

正如@Konrad建議的那樣,如此鬆散地使用共享內存不是一件好事™。這就是說,Boost確實提供了進程間同步實用程序,其工作方式與傳統上在線程之間使用的實用程序非常相似。

給文檔的頁面提供了一個很好的閱讀(特別是關於條件的章節),看看這是否能讓你知道應該瞄準什麼。

+0

這是一個很好的閱讀。謝謝! – gpierris 2012-03-15 15:28:15