我正在编写一个模拟流程同步的程序。我试图在C ++中实现fork和semaphore技术,但是开始时遇到了麻烦。我是否只是创建一个进程并从一开始就将它发送到fork?程序是否只是一个在父/子进程之间来回传递的无限循环?你如何在C ++,显式内存地址或只是一些全局变量中创建“共享内存”的概念?我只需要获得程序流程的整体结构/想法。任何参考资料将不胜感激。
答案 0 :(得分:1)
从您的问题中不清楚您是否真的意味着模拟,或者您是否尝试从C ++访问常见的进程同步功能。您对fork
的引用表明Linux是您的目标。
只要您创建新流程,就不会模拟流程同步,而是使用操作系统的本机同步功能。
在Linux上,要获取共享内存,您可以使用mmap(可能使用MAP_ANON)然后调用fork。生成的内存区域将被共享。您还可以使用System V Shared Memory(名称以'shm'开头的系统调用)。调用fork后,子节点是父节点的副本,但普通的全局变量不会最终共享:子节点获取新副本。因此需要mmap或shm。
在Windows上,没有像fork这样的东西。您必须使用命名共享内存对象或映射文件来建立共享内存。新进程必须进行必要的系统调用才能打开共享内存对象或将公共文件映射到其地址空间。
如果你真的想构建一个模拟器 - 一个内部管理进程和共享内存的进程,你可能想要获取描述该领域Linux或Windows内部工作的各种书籍之一。 / p>