Linux19 进程间通信(四)共享内存

共享内存是最快的一种IPC
使得A进程和B进程都能通过虚拟地址映射到同一块物理空间上。
区域既属于A进程又属于B进程。两个进程共享同一块空间。两个指针访问同一块内存,不需要切换内核态,不需要经过操作系统。
1、 共享内存一旦使得进程映射到此共享内存区域,不需要用户态切换成内核态。
2、 共享内存相比较于其他通信方式,会少两次数据的拷贝。
共享内存实现:<sys/shm.h>
(1) 创建或者获取
int shmget((key_t)key,int sharedsize,int flag);
失败返回-1
(2) 将进程中虚拟地址映射到共享内存区域
void* shmat(int shmid,void* addr,int flag);
失败返回NULL
(3) 断开连接
int shmdt(void* addr);
(4) 删除内核对象
int shmctl(int shmid,int cmd,struct shmid_ds* buf);
成功返回0,失败返回-1
实现:A进程接收用户输入,B进程将用户输入全部转为小写。

进程间通信的总结
将进程间通信分为两类:第一类信号&信号量,不发数据只是通知,第二类,管道、消息队列用于发送数据。
有名管道:通过管道文件来完成多进程间通信,一般用于两个进程间通信
无名管道:借助于fork打开的同一个文件描述符,只能用于父子两个进程之间。
消息队列:发送带有类型的数据,可以真正实现多进程。
共享内存:使得两个进程间共享同一块物理内存,实现数据传递,但是必须使用信号量控制进程同步。共享内存是最快的一种IPC
信号量:完成进程同步控制,用于多进程访问同一临界资源。
信号:完成进程间消息通知。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值