共享内存是允许两个或多个进程共享同一块内存区域,并通过该区域实现数据交换的进程间通信机制。通常是由一个进程开辟一块共享内存区域,然后允许多个进程对此区域进行访问。由于不需要任何介质,而是数据由内存直接映射到进程空间,即数据不需要在客户进程和服务进程之间复制,所以共享内存是最快的 IPC 机制。共享内存必须解决多个进程之间同步访问的问题,必须控制同一时刻只允许一个进程对共享内存区域进行写入数据操作,否则会造成数据混乱。同步访问问题可以使用信号量或者记录锁进行解决。
每个共享内存都有相对应的 shmid_ds 结构,其定义如下:
/* 共享内存 */
/* shmid_ds 结构 */
struct shmid_ds
{
struct ipc_perm shm_perm; /* operation permission struct */
size_t shm_segsz; /* size of segment in bytes */
pid_t shm_lpid; /* pid of last shmop() operation */
pid_t shm_cpid; /* pid of creator */
shmatt_t shm_nattch; /* number of current attaches */
time_t shm_atime; /* last-attach time */
time_t shm_dtime; /* last-detach time */
time_t shm_ctime; /* last-change time */
};
共享内存创建与打开
为了能