|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
概述
9 W6 _" q- p! G' S! `; @
/ |3 D: H3 F4 ]0 H% s' B 可以说,共享内存是一种最为高效的进程间通信方式,因为进程可以直接读写内存,不需要任何数据的复制。为了在多个进程间交换信息,内核专门留出了一块内存区,这段内存区可以由需要访问的进程将其映射到自己的私有地址空间。因此,进程就可以直接读写这一段内存区而不需要进行数据的复制,从而大大提高了效率。当然,由于多个进程共享一段内存,因此也需要依靠某种同步机制,如互斥锁和信号量等。共享内存的原理图如下图1所示
6 l! s. `# Y; O4 \! c1 t! N6 R1 i- e
. B4 x% w9 n' D$ ?) S共享内存使用步骤
7 t z0 R3 t# j$ I. T2 a& F1 B; X" g0 h/ Z& @8 q
① 创建共享内存。也就是从内存中获得一段共享内存区域,这里用到的函数是shmget();
: g v- t9 d" a3 J- H. |
' b3 _1 e6 }& E. R! X4 c ② 映射共享内存。也就是把这段创建的共享内存映射到具体的进程空间中,这里使用的函数是shmat()。到这一步就可以使用这段共享内存了,也就是可以使用不带缓冲的I/O读写命令对其进行操作。: }+ R3 ~7 w4 H: A+ X, _
" ], t6 R" |5 e. V( I
③ 撤销映射。使用完共享内存就需要撤销,用到的函数是shmdt()。5 [6 w& c2 v+ M+ G: Y) B
# H9 p4 w$ N b0 n5 Z
函数说明
6 w0 f* N, m$ @' _0 f+ j! a& B& R' @; q0 R$ y
! d! K# N6 w5 j; D: _+ `0 G" J4 ? A; s+ N
4 H, T# x& G3 b6 r% _3 g8 v( y! |
|
|