首页 > 解决方案 > 如何在子进程和父进程之间连续切换上下文?

问题描述

我正在尝试基于共享内存的概念用 C 语言编写程序。我正在创建两个共享内存并使用 fork() 函数创建两个进程。我希望其中一个进程写入其中一个共享内存,而另一个进程从中读取,反之亦然。我不想使用管道。如何在两个进程之间连续切换上下文,以便我可以从一个进程读取并从另一个进程写入?

标签: coperating-system

解决方案


我正在尝试基于共享内存的概念用 C 语言编写程序。我正在创建两个共享内存并使用 fork() 函数创建两个进程。我希望其中一个进程写入其中一个共享内存,而另一个进程从中读取,反之亦然。我不想使用管道。如何在两个进程之间连续切换上下文,以便我可以从一个进程读取并从另一个进程写入?

上下文切换不是 C 概念。操作系统管理它,不受用户空间程序的控制。但这甚至可能与您的问题无关,因为如今多核和多处理器计算机已成为常态,它们可以提供真正的并发性,而无需上下文切换。

两个进程完全可以通过共享内存进行通信。毕竟,这就是它的用途。但是,如果没有同步他们的行动的机制,他们就不可能这样做。例如,进程 B 应该如何知道进程 A 何时完成更新共享内存,以便 B 可以读取 A 写的内容?而A怎么知道B已经读完了,这样再更新共享内存就不会丢失数据呢?

这些类型的同步问题是通过信号量、互斥体和条件变量等专用同步对象以及对其进行操作的函数来处理的。如何正确使用这些主题过于广泛,无法在一个 SO 答案中涵盖,但您会在各种 SO 问题中找到许多关于细节的示例。

或者你可以只使用管道,这对于本质上是串行的通信来说要容易得多。


推荐阅读