进程间通信------共享内存

共享内存作为进程间通信高效方式,避免了数据在内核与用户空间间的拷贝。但需注意同步互斥问题,其生命周期与内核同步。文章介绍了shmget、shmat、shmdt和shmctl等函数的使用,并提供了代码示例展示如何创建、映射、控制及删除共享内存,以实现进程间通信。
摘要由CSDN通过智能技术生成

     以下用到的消息队列中的相关内容,均可在这里找到:https://blog.csdn.net/sandmm112/article/details/79936107

        共享内存是进程间通信的一种方式。系统中物理内存结构及进程与共享区的映射关系如下:


        创建一个共享内存是指在共享取开辟一片区域,将该区域分别映射到两个进程的虚拟地址空间中,那这两个进程便可以通过这片共享区域进行通信了。因为共享内存位于用户空间中,所以每次进行通信时,不会像消息队列一样先将一个进程中用户空间中的数据拷贝到内核,再将内核中的数据拷贝到另一进程的用户空间中。这样便可不在涉及到内核,所以说共享内存是最快的进程间通信方式。

        但是共享内存并没有提供同步与互斥机制,所以当多个进程同时访问共享内存时可能会数据的二义性。

        注意:共享内存的的生命周期也是随内核的。

        以下来介绍一些有关共享内存的函数,来进一步理解共享内存:

1. 共享内存与消息队列一样,首先需要一个key值来创建共享内存。key值的获取方法与消息的队列中的方法相同

2. 创建共享内存

int shmget(key_t key,size_t size,int shflg);//头文件:<sys/ipc.h>,<sys/s
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值