写入以增强共享内存

时间:2012-03-13 15:26:30

标签: c++ boost interprocess

一定是直截了当的答案,但我没有找到任何地方怎么做......

我已使用boost IPC系统成功创建了一个共享内存段,如下例所示:

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

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

我也能够从不同的过程中读取值。我无法理解的是如何编辑此变量的值(如果我允许将“Test”称为变量)并从其他进程读取它们。我想要循环并写下这些值。

谢谢

2 个答案:

答案 0 :(得分: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
   );

答案 1 :(得分:1)

正如@Konrad建议的那样,使用共享内存如此松散并不是A Good Thing™。话虽这么说,Boost确实提供了进程间同步实用程序,它们与传统上在线程之间使用的工具大致相同。

给文档的this页面一个很好的阅读(特别是关于条件的部分),看看是否可以让你知道应该瞄准什么。