Linux进程通信IPC--共享内存SharedMemory

本文介绍了Linux下使用Boost库实现的共享内存通信机制,详细阐述了共享内存的工作原理、如何创建、指定大小、映射到进程空间以及删除共享内存的过程,并提供了一个简单的使用示例。强调了在共享内存操作中同步机制的重要性。
摘要由CSDN通过智能技术生成

前言: 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() 函数请求大小后才能使用该区域。

  • 指定内存区域大小
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值