【问题标题】:Where to start when programming process synchronization algorithms like clone/fork, semaphores对进程同步算法(如克隆/分叉、信号量)进行编程时从哪里开始
【发布时间】:2010-03-30 16:30:44
【问题描述】:

我正在编写一个模拟进程同步的程序。我正在尝试在 C++ 中实现分叉和信号量技术,但在开始时遇到了麻烦。我是否只是创建一个流程并从一开始就将其发送到 fork?程序是否只是一个在父/子进程之间来回循环的无限循环?以及如何在 C++ 中创建“共享内存”的概念、显式内存地址或只是一些全局变量?我只需要了解程序流程的整体结构/想法。任何参考将不胜感激。

【问题讨论】:

    标签: c++ process synchronization


    【解决方案1】:

    从您的问题中不清楚您是否真的是指模拟,或者您是否正在尝试从 C++ 访问常见的进程同步功能。您对 fork 的引用表明 Linux 是您的目标。

    当您创建一个新进程时,您不是在模拟进程同步,而是在使用操作系统的本机同步功能。

    在 Linux 上,要获得共享内存,您可以使用 mmap(可能使用 MAP_ANON),然后调用 fork。生成的内存区域将被共享。您还可以使用 System V Shared Memory(名称以 'shm' 开头的系统调用)。一旦你调用 fork,子进程就是父进程的副本,但普通的全局变量最终不会共享:子进程得到一个新副本。因此需要 mmap 或 shm。

    在 Windows 上,没有什么比 fork 更好的了。您必须使用命名的共享内存对象或映射文件来建立共享内存。新进程必须进行必要的系统调用以打开共享内存对象或将公用文件映射到其地址空间。

    如果你真的想构建一个模拟器——一个内部管理进程和共享内存的单一进程,你可能想选择一本描述 Linux 或 Windows 在这个领域的内部工作的各种书籍。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-04-13
      • 1970-01-01
      • 1970-01-01
      • 2012-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多