2012-03-13 26 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