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