共享内存是运行在同一台机器上的进程间最快的通信方式,因为数据不需要在不同的进程间复制。
通常由一个进程创建一块共享内存区,其余进程对这块内存区进行读写。
得到共享内存有两种方式:映射/dev/mem 设备和内存映像文件。前一种方式不给系统带来额外的开销,但在现实中并不常用,因为它控制的存取将是实际的物理内存。
常用的方式是通过shmXXX函数族来实现利用共享内存进行存储的。
首先,要用的函数是shmget,它获得一个共享存储标识符。
#include<sys/types.h>
#include<sys/ipc.h>
#include<sys/shm.h>
int shmget(key_t key, int size, int flag);
当共享内存创建后,其余进程可以调用shmat()将其连接到自身的地址空间中。
void *shmat(int shmid, void *addr, int flag);
使用共享存储来实现进程间通信的注意点是对数据存取的同步,必须确保当一个进程去读取数据时,它所想要的数据已经写好了。通常,信号量被要求用来实现存储数据存取的同步。