写入以提高共享内存

Writing to boost shared memory

本文关键字:共享 内存 高共享      更新时间:2023-10-16

这肯定是一个直截了当的答案,但我还没有找到任何方法…

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

boost::interprocess::managed_shared_memory segment(boost::interprocess::create_only, "MySharedMemory", 65536);
sharedData = segment.construct<MyType>("Test")(0, 0.2);

我还能够从不同的过程中读取值。我不能理解的是如何编辑这个变量的值(如果允许我将"Test"作为变量调用),并从其他进程中读取它们。我想循环并写出这些值。

感谢

这不是一个好主意,因为没有办法在共享内存块上强制并发。以同样的方式,共享资源需要受到保护,以免多个线程相互碰撞(例如,使用互斥体或关键部分),共享内存块也是如此。

如果没有使用命名管道之类的额外信号机制,就无法安全地发出共享内存块是的信号

  • 可供阅读
  • 可写入
  • 更新

如果使用read_write标志创建内存块,它将设置正确的Windows权限。boost文档中的示例显示了这一点。

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

正如@Konrad所建议的,如此松散地使用共享内存不是一件好事;。也就是说,Boost确实提供了进程间同步实用程序,其工作原理与传统上在线程之间使用的那些实用程序非常相似。

仔细阅读这一页的文档(尤其是关于条件的部分),看看这是否能让你对目标有所了解。