共享内存和信号量都是 Linux 下 IPC(Inter-Process Communication)的重要手段,尤其是共享内存,是最快的 IPC 方式也是最常用的方式之一。共享内存的基本思想是:同一块物理内存被映射到多个进程各自的虚拟内存空间,一个进程对共享内存数据的更新对其他进程是立即可见的,所以需要使用信号量(或者其他同步原语)来同步多个进程对共享内存的访问。图 1 显示了共享内存在进程虚拟地址空间中的位置:

下面使用共享内存和信号量解决生产者和消费者问题,代码比较简单,相关 API 的使用方法可以参照 Linux Manual 或者 《Linux系统编程手册》这本书。
|