2013-05-04 63 views
1

考虑到这种情况,我被要求画上具有各种颜色标签的盒子,这些标签指示盒子将被涂上的颜色,并且这些盒子到达盒子容量为2的涂漆单元,这意味着它只能同时绘制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

您是否考虑过让绘画设备成为一个过程,并让这些框成为通过调度过程传递给绘画设备的对象?而不是将进程/线程与每个框相关联。 – 2013-05-04 23:57:20

+1

感谢您的输入,但我忘记提及一些细节。请再次参考问题。 – Varaquilex 2013-05-05 00:53:50

回答

1

您可以随时启动一个接一个的进程,然后wait让新进程完成,然后再启动下一个进程。

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

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

+0

我忘了提一些细节。你能否看到问题的编辑部分?无论如何感谢您的关注。 – Varaquilex 2013-05-05 00:54:33

+0

@Volkanİlbeyli我的答案中的第一个解决方案不涉及进程之间的任何信号。 – 2013-05-05 01:05:26

+0

我现在看到解决方案。感谢您的回答:) – Varaquilex 2013-05-05 01:08:26