|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
概述 @3 O" Q4 r |! b& G
# D9 B8 g. J. ?' b 可以说,共享内存是一种最为高效的进程间通信方式,因为进程可以直接读写内存,不需要任何数据的复制。为了在多个进程间交换信息,内核专门留出了一块内存区,这段内存区可以由需要访问的进程将其映射到自己的私有地址空间。因此,进程就可以直接读写这一段内存区而不需要进行数据的复制,从而大大提高了效率。当然,由于多个进程共享一段内存,因此也需要依靠某种同步机制,如互斥锁和信号量等。共享内存的原理图如下图1所示
: G4 L' z6 f3 O/ r; ^, X& C3 h" i6 j3 F$ L
共享内存使用步骤
1 J t, {& C; z5 B4 z4 o: I+ i1 X* z/ z3 }% h; u0 a# K1 R
① 创建共享内存。也就是从内存中获得一段共享内存区域,这里用到的函数是shmget();1 o$ b9 ]1 b* w8 y, G
2 a7 Z7 Z$ v% Q: S1 b
② 映射共享内存。也就是把这段创建的共享内存映射到具体的进程空间中,这里使用的函数是shmat()。到这一步就可以使用这段共享内存了,也就是可以使用不带缓冲的I/O读写命令对其进行操作。- b' a- m$ o( ~3 M
$ D( g* ~; Y! ?( I- a- o
③ 撤销映射。使用完共享内存就需要撤销,用到的函数是shmdt()。$ x$ r; g m$ k- c+ P' q* U* u
4 t( q d% @ m/ o' k& K
函数说明
* M' _) r4 G! m+ S r) ?
) X' U" Q1 ?7 O' q
7 I' b) Y1 E4 q, B8 R' ~ h9 `
5 K5 `7 E: y2 ~7 f
|
|