还是以操作系统第三章大作业中的一项作为导入。大作业2要求.png
共享内存就是允许多个不相关的进程共享访问的一个逻辑内存,是进程间数据共享的一种很有效的方式。所有进程都可以对这片区域进行写入、读取,类似于全局变量吧。
使用共享内存需要一些函数接口来实现,如shmget函数创建共享内存,shmat函数将共享内存连接到进程,shmdt函数将共享内存从进程中分离,shmctl函数可用来删除共享内存段。
有关函数的具体用法可参考Linux进程间通信——使用共享内存
)
共享内存并没有提供同步机制,故我们需要使用信号量等方式来控制进程间的互斥。本例没有使用信号量,而是使用了written作为标志起到互斥量相同的作用。
下面直接丢代码了,这个问题理解起来没什么难度,就是熟悉对共享内存的操作。模型也借用了上面博客的例子,进行了部分修改。详细内容见代码及注释。
plain
1 | #include <unistd.h> |
运行示例如图。运行示例.png
其他参考链接也列出
linux 共享内存(实现进程之间通信)
共享内存的实现详解