如何以某种顺序运行分叉进程?

时间:2013-05-04 23:34:04

标签: c linux parallel-processing ipc

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

流程和线程将在流程中使用。问题是,我被要求以FIFO方式绘制框。请考虑以下示例:

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进程(不是同时进行),并且未确定顺序。我能想到的唯一方法是(不知何故)考虑分叉进程(每个框)的顺序,并以某种方式优先考虑绘制操作,但我认为这甚至不是解决方案。这可以通过顺序方法(排序然后绘制)轻松解决,但考虑到IPC和并发流程,排序根本无济于事,至少不能保证任何排序。

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

修改

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

1 个答案:

答案 0 :(得分:1)

您始终可以逐个启动流程,wait可以在开始下一个流程之前完成新流程。

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

或使用类似named semaphores的信号来互相发出信号。