IPC对象通信
System V IPC 对象是由贝尔实验室发展而来的,主要包括三种通信方式 共享内存、消息对列、信号灯。
三种通信方式都需要一个标识符,共享内存标识符、消息队列标识符、信号灯标识符。 标识符只是IPC对象的内部名,如果多个进程需要在同一个IPC对象上进行回合通信,需要一个外部名。为此,使用了键 (key值)。
一、 IPC对象通信的三种方式
二、 IPC对象通信
2.1 IPC对象的外部名键值 key
2.2 共享内存
共享内存允许两个或者多个进程共享一定的存储区,因为数据不需要在客户进程和服务器进程间进行数据的复制,所以是一种最快的IPC通信的方式。
共享内存创建的流程:
1 调用ftok函数生成键值key
2 创建或打开共享内存
3 共享内存的映射
4 撤销共享内存的映射
5 删除共享内存
2.3 消息队列
消息队列是消息的链表,存放在内核中并由消息队列标识符标识。Linux中默认配置系统中,最大能创建的队列数是16个,最大的消息数是262144个。每个不同的系统是不一样的。
消息队列创建流程:
1 调用ftok函数生成key值
2 创建或者打开消息队列
3 添加消息到消息队列中
4 从消息队列中取出消息
5 对消息队列的控制,如 删除消息队列
2.4 信号灯
信号灯也叫信号量,它是不同进程间或者线程间进行同步的一种机制。它是一个计数器,用于多进程对共享数据的访问。信号量的实现是原子操作。一般和共享内存一起使用。
二值信号灯:值为0或者1。与互斥锁类似,资源可用时为1,资源不可用时为0。
计数信号灯:值在0到n之间。用来统计资源,其值代表可用的资源数。
1 调用ftok生成键值key
2 信号灯的创建或者打开
3 信号灯的pv操作
4 信号灯的操作,设置信号灯的初始值,删除信号灯集