1 共享内存+互斥量实现linux 进程间通信 一、 共享内存简介 共享内存是进程间通信中高效方便的方式之一
共享内存允许两个或更多进程访问同一块内存,就如同 malloc() 函数向不同进程返回了指向同一个物理内存区域的指针,两个进程可以对一块共享内存进行读写
共享内存并未提供进程同步机制,使用共享内存完成进程间通信时,需要借助互斥量或者信号量来完成进程的同步
这里说一下互斥量与信号量的区别
互斥量用于线程的互斥,信号量用于线程的同步,这是互斥量与信号量的本质区别,其次信号量实现互斥量的功能
本文结合个人实际项目需求,采用互斥量实现进程间访问共享内存的互斥,即同一时刻只能允许一个进程对共享内存进行写操作
二、 使用系统调用完成共享内存的申请、连接、分离和删除 共享内存函数由 shmget、shmat、shmdt、shmctl 四个函数组成
使用时需要包含#include 、#include 、#include 和
共享内存的申请 使用 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 表示他人的权限
这三部分由算数