电脑桌面
添加小米粒文库到电脑桌面
安装后可以在桌面快捷访问

共享内存+互斥量实现linux进程间通信

共享内存+互斥量实现linux进程间通信_第1页
1/8
共享内存+互斥量实现linux进程间通信_第2页
2/8
共享内存+互斥量实现linux进程间通信_第3页
3/8
1 共享内存+互斥量实现linux 进程间通信 一、 共享内存简介 共享内存是进程间通信中高效方便的方式之一。共享内存允许两个或更多进程访问同一块内存,就如同 malloc() 函数向不同进程返回了指向同一个物理内存区域的指针,两个进程可以对一块共享内存进行读写。 共享内存并未提供进程同步机制,使用共享内存完成进程间通信时,需要借助互斥量或者信号量来完成进程的同步。这里说一下互斥量与信号量的区别。互斥量用于线程的互斥,信号量用于线程的同步,这是互斥量与信号量的本质区别,其次信号量实现互斥量的功能。 本文结合个人实际项目需求,采用互斥量实现进程间访问共享内存的互斥,即同一时刻只能允许一个进程对共享内存进行写操作。 二、 使用系统调用完成共享内存的申请、连接、分离和删除 共享内存函数由 shmget、shmat、shmdt、shmctl 四个函数组成。使用时需要包含#include 、#include 、#include 和。 1.共享内存的申请 使用 shmget()完成共享内存的申请,函数原型如下: int shmget(key_t key, size_t size, int shmflg); key:共享内存的标识符,大于 0 的 32 位整数。若是父子关系的进程间通信,这个标识符用 IPC_PRIVATE,若进程没有关系,可自行定义。 size:共享内存大小,单位 Byte。 shmflg:共享内存的模式(mode),包括三部分,第一部分是:无指定标示符的共享内存是否创建,由 0(只获取)或 IPC_CREAT(未创建则新建)决定。第二部分:IPC_EXCL(若已创建,则报错)。第三部分:权限标识,由八进制表示,如 0640,第一个 0 是八进制数标识,第一个 6(4+2)表示拥有者的权限读和写,第二个 4 表示同组权限写,第 3 个 0 表示他人的权限。这三部分由算数或运算符|拼接组成 shmflg,如 IPC_CREAT|0640。 成功时返回共享内存的 ID,失败时返回-1。 2.共享内存的连接 使用 shmat()函数将已经申请好的共享连接到当前进程的地址空间,函数原型如下: void *shmat(int shmid, const void *shmaddr, int shmflg); shmid:共享内存标识符。 shmaddr:指定进程使用共享内存的起始地址,直接指定为 NULL 让内核自己决定一个合适的地址位置。 shmflg:SHM_RDONLY 为只读模式,其他为读写模式,通常设置为 NULL。 成功时,这个函数返回共享内存的起始地址。失败时返回-1。 3.共享内存的分离 使用 sdmdt()函数将已连接的共...

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。
3、如文档内容存在违规,或者侵犯商业秘密、侵犯著作权等,请点击“违规举报”。

碎片内容

共享内存+互斥量实现linux进程间通信

确认删除?
VIP
微信客服
  • 扫码咨询
会员Q群
  • 会员专属群点击这里加入QQ群
客服邮箱
回到顶部