利用进程间通信IPC中的三个对象:共享内存、信号灯数组、消息队列,解决并发进程同步与互斥的问题
- 共享内存是 OS 内核为并发进程间交换数据而提供的一块内存区(段)。如果段
的权限设置恰当,每个要访问该段内存的进程都可以把它映射到自己私有的地址空
间中。如果一进程更新了段中数据,那么其他进程立即会看到这一更新。进程创建
的段也可由另一进程读写。 (ipcs -m) - 信号灯数组是 OS 内核控制并发进程间共享资源的一种进程同步与互斥机制。 (ipcs -s)
- 消息队列是 OS 内核控制并发进程间共享资源的另一种进程同步机制。 (ipcs -q)
在权限允许的情况下您可以使用 ipcrm 命令删除系统当前存在的 IPC 对象中的任一个对象。
ipcrm -m 21482
删除标号为 21482 的共享内存。
ipcrm -s 32673
删除标号为 32673 的信号灯数组。
ipcrm -q 18465
删除标号为 18465 的消息队列。
在 linux 的 proc 文件系统中有 3 个虚拟文件动态记录了由以上 ipcs 命令显示的
当前 IPC 对象的信息,它们分别是:
- /proc/sysvipc/shm 共享内存
- /proc/sysvipc/sem 信号量
- /proc/sysvipc/msg 消息队列<