深入详解Linux进程间通信之共享内存(Shared Memory)+信号量同步

Posted 白马负金羁

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了深入详解Linux进程间通信之共享内存(Shared Memory)+信号量同步相关的知识,希望对你有一定的参考价值。

在Linux下的多个进程间的通信机制叫做IPC(Inter-Process Communication),它是多个进程之间相互沟通的一种方法。专栏前面的文章中演示过使用shared memory进行IPC的方法。本文将更进一步探讨Linux进程间通过共享内容进行通信的方法,包括如何使用Anonymous shared memory,以及如何使用信号量来进行同步等。Shared memory允许两个或多个进程共享一给定的存储区,因为数据不需要来回复制,所以是最快的一种IPC机制。本文中的代码都在Ubuntu系统上实现。
 

一、Anonymous shared memory

匿名映射前面提到过,有兴趣的读者还可以参考【1】来了解更多。在Linux中有两种创建anonymous mappings的方法:

  • specify MAP_ANONYMOUS flag and pass -1 for fd
addr = mmap(NULL, length, PROT_READ | PROT_WRITE, MAP_SHARED | MAP_ANONYMOUS, -1, 0); 
if (addr == MAP_FAILED)
    exit(EXIT_FAILURE);  
  • open /dev/zero and pass this opened fd (this method is typically used on systems like BSD, that do not have MAP_ANONYMOUS flag)
fd = open("/dev/zero", O_RDWR);   
addr = mmap(NULL, length, PROT_READ | PROT_WRITE, MAP_PRIVATE,

以上是关于深入详解Linux进程间通信之共享内存(Shared Memory)+信号量同步的主要内容,如果未能解决你的问题,请参考以下文章

深入详解Linux进程间通信之共享内存(Shared Memory)

深入详解Linux进程间通信之共享内存(Shared Memory)+信号量同步

深入详解Linux进程间通信之共享内存(Shared Memory)+信号量同步

深入详解Linux进程间通信之共享内存(Shared Memory)+信号量同步

linux进程间通信之System V共享内存详解及代码示例

linux进程间通信之Posix共享内存用法详解及代码举例