我试图基于共享内存的概念用C编写程序。我正在创建两个共享内存,并使用fork()函数创建两个进程。我希望其中一个过程可以写入一个共享内存,另一个过程可以从中读取,反之亦然。我不想使用管道。我如何连续在两个进程之间进行上下文切换,以便可以从一个进程读取和从另一个进程写入?
答案 0 :(得分:1)
我试图基于共享的概念用C编写程序 记忆。我正在创建两个共享内存并创建两个进程 使用fork()函数。我希望其中一个过程可以写成一个 共享内存的大小,另一个则从中读取,反之亦然 其他共享内存。我不想使用管道。我该如何情境 连续在两个过程之间切换,以便我可以阅读 一个从另一个写?
上下文切换不是C概念。操作系统在用户空间程序的控制范围之外对其进行管理。但这可能甚至与您的问题无关,因为如今多核和多处理器计算机已成为常态,并且它们可以提供真正的并发性,而无需上下文切换。
两个进程完全可以通过共享内存进行通信。毕竟,这就是的。但是,如果没有同步动作的机制,他们就不可能这样做。例如,进程B应该如何知道进程A何时完成了对共享内存的更新,以便B可以读取A编写的内容?并且A如何知道B已经完成读取,以便如果再次更新共享内存不会丢失任何数据?
这类同步问题是通过专用的同步对象(例如信号量,互斥量和条件变量)以及对其进行操作的函数来处理的。如何正确使用这些内容太笼统了,无法涵盖在一个SO答案中,但是您会在各种SO问题中找到许多有关细节的示例。
或者您也可以只使用管道,这对于本质上是串行通信的通信来说要容易得多。