写入以提高共享内存
Writing to boost shared memory
这肯定是一个直截了当的答案,但我还没有找到任何方法…
我已经成功地使用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确实提供了进程间同步实用程序,其工作原理与传统上在线程之间使用的那些实用程序非常相似。
仔细阅读这一页的文档(尤其是关于条件的部分),看看这是否能让你对目标有所了解。
相关文章:
- 使用Boost Interprocess创建托管共享内存需要很长时间
- 字符串共享内存映射的向量
- CUDA 使用共享内存平铺 3D 卷积实现
- 共享内存:MapViewOfFile 返回错误 5
- 如何在多写入器情况下对文件支持的共享内存中的大页面出错
- 有没有办法列出所有共享内存对象的名称?
- 共享内存的升压容器是否实现锁定?
- 共享内存中的健壮互斥锁不是那么健壮
- 使用IPC/共享内存将Integer数组从C++传递到Python
- 共享内存和性能
- 在这种特殊情况下,我是否需要在共享内存中使用原子类型
- 是否可以在专用内存空间中分配一个为提升管理共享内存而创建的对象
- fork(),在C中共享内存和指针
- 访问共享内存而不使用易失性、std::atomic、信号量、互斥锁和自旋锁
- 提升进程间共享内存open_or_create每次都会引发异常
- 通过 mmap-ed 共享内存传递可变长度 C 字符串
- 越界访问 CUDA 共享内存
- 在共享内存中插入映射映射时出现编译器错误
- 矩阵矢量产品 CUDA 通过平铺和共享内存提高性能
- 如何更改在 c++ 中使用提升库创建的共享内存的路径