c - 如何按某种顺序运行 fork 进程?

标签 c linux parallel-processing ipc

鉴于这种情况,我被要求绘制带有各种颜色标签的盒子,这些颜色标签指示盒子将被绘制的颜色,这些盒子到达一个盒子容量为 2 的绘画单元,这意味着它可以只能同时绘制 2 个框。该单元不能同时涂上不同的颜色。在更改颜色和绘制其他框之前,它必须等待框的颜色完成。

进程中会用到进程和线程。问题是,我被要求以先进先出的方式绘制盒子。考虑以下示例:

Box #1    Box #2    Box #3    Box #4    Box #5
  R         B         G         R         B

我必须按照给定的顺序绘画:

Box #1, Box #4, Box #2, Box #5, Box #3
  R        R       B       B        G

我可以在指针的帮助下安排单元用于绘制框(在本例中为 RBG)的颜色顺序,但我不能保证框将按给定顺序绘制,即顺序可能是4 1 5 2 3 而不是 1 4 2 5 3,因此我将违反 FIFO 规则,因为将有 #ofBoxes 进程正在运行(不是同时运行,总共) 并且顺序未确定。我能想到的唯一方法是(以某种方式)考虑 fork 进程(每个盒子)的顺序并以某种方式优先考虑绘画操作,但我认为这甚至不是解决方案。这可以通过顺序方法(排序然后绘制)轻松解决,但考虑到 IPC 和并发进程,排序根本无济于事,至少不能保证任何顺序。

我有点被困在这里,我只是在寻求解决问题的提示,而不是确切的解决方案。请尽量抽象。提前致谢。

编辑

请原谅我没有提到一些必要的细节。 我被迫将每个盒子建模为一个单独的进程,而不是使用信号进行同步。

最佳答案

您始终可以一个接一个地启动流程,然后等待新流程完成,然后再开始下一个流程。

或者您可以使用管道将所有进程链接在一起,使第一个进程的 stdout 连接到第二个进程的 stdout,依此类推。然后在子进程中,您不会继续,直到您从前一个进程获得一些输入以继续。

或者使用类似 named semaphores 的东西互相发信号。

关于c - 如何按某种顺序运行 fork 进程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16379938/

相关文章:

c - 梯度(最速)下降的实现

c - 在linux中获取多个网络接口(interface)网关地址

C++将临时文件作为bash脚本执行

linux - 我创建的文件名末尾的额外字符

java - 我应该使用哪个 WindowBuilder Swing 小部件来显示 System.out "console"?

c - 如何使用 ld 检测链接中的歧义

c - 如何将目录名称正确存储到链表中?

r - R 中的 furrr 包不会继续将工作分散到所有内核?

r - 将 data.table 拆分为大致相等的部分

java - JVM启动时会fork多少个线程?