前言: Linux 进程通信系列文章是对工作中使用的技术进行描述总结,使用了Boost 库IPC 实现,因此文章的代码部分选自Boost example 文档。
共享内存(SharedMemory)
共享内存是进程间最快的通信机制,不同进程将同一块内存区域映射到各自的进程地址空间,获取地址后即可对该地址空间的内存区域进行读写操作。由于进程运行的独立性,对公共内存区域的读写不可避免产生竞争,因此也就需要同步机制保护公共区域。
与消息队列(MessageQueue)相比,共享内存机制避免了一次内核空间到用户空间的copy 操作, 而采用直接映射公共区域到进程地址空间的方式。
共享内存实现
Boost Interprocess 编程提供了跨平台的共享内存实现, 通过shared_memory_object 类。
- 创建共享内存区域
shared_memory_object(
create_only_t, //open_or_create_t, open_only_t
const char *name, //名称,唯一标识一块共享内存
mode_t mode, //访问模式,读/写/读写
const permissions &perm = permissions())
shared_memory_object类型的对象创建后,相应的共享内存就在操作系统中建立了。但此共享内存区域的大小被初始化为0, 需要调用 truncate() 函数请求大小后才能使用该区域。
- 指定内存区域大小