Linux进程间通信之共享内存

本文探讨Linux下的共享内存通信机制,作为最快的进程间通信方式,它允许不同进程共享同一物理内存,但需借助信号量实现同步。共享内存通过shmget、shmat、shmdt和shmctl等函数进行操作,包括获取、删除、映射及断开连接等步骤,具有生命周期随内核、映射机制等特点。
摘要由CSDN通过智能技术生成

共享内存的实现:两个不同进程共享同一块物理内存,达到访问同一份资源的目的
这里写图片描述

共享内存是所有进程间通信速度最快的一种方式,省去了数据的copy
在消息队列中就是server和client都读取了对方的数据并拷贝下来,因此有两次拷贝

但是共享内存优缺点:他自身不提供同步于互斥机制(可以通过信号量来实现)
一般申请内存,都是按照一页的大小,避免内存碎片(4K为一页)
如果申请到的内存不够一页那么操作系统自动会进行向上调整,把它申请成为一页,一页半就是两页

共享内存的特点:生命周期随内核
共享内存使用映射机制

用于Linux进程通信共享内存。共享内存函数由shmget、shmat、shmdt、shmctl四个函数组成。

1、共享内存的获取

#include <sys/ipc.h>
#include <sys/shm.h>
int shmget(key_t key, size_t size, int shmflg);

参数
key和之前消息队列一样都是为了获取共享内存的一个标识
size代表要申请的内存的大小,申请的规则之前已经提过
shmflg 和之前消息队列msgflag的作用一样在这里就不赘述了

2、共享内存的删除:

 #include <sys/ipc.h>
 #include <sys/shm.h>
 int shmctl(int shmid, int cmd, struct shmid_ds *buf);

参数
shmid :代表共享内存的标识,和消息队列中的msgid的效果相似
cmd:代表你要操作的方式删除则设置成为IPC_RMID
buf:在删除的时候通常设置成为NULL<

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值