我使用fork来分叉多个子进程,但由于某些原因,它们相互打印就是一个例子。
Winning Child (5): 0
Child placed peice at: 6,4
- - - - - - - -
Child placed peice at: 2,6
- - - - - - - -
Child placed peice at: 4,1
- - - - - - - -
Child placed peice at: 6,5
- - - - - - - -
Child placed peice at: 3,1
R - - - - - - -
Child placed peice at: 5,4
R - - - - - - -
Child placed peice at: 5,7
B B B B - R B R
R R B B R R B B
Child placed peice at: 2,2
这应该像这样打印:
Winner Parent
Winning Parent (20): 26181
- - - - - - - -
- - - - - - - -
- - - - - - - -
- - - - - - - -
B - - R - - - -
B - - R B - - -
B - - R B B R R
R R - R R B B B
当我打印获奖板时,有没有办法阻止其他进程停止打印?
答案 0 :(得分:2)
在不同进程中重叠print语句是绝对正常的,因为同时运行。您可以wait()
来处理您希望不与其他进程重叠打印的进程,但是如果您将失去并发性。
另一种解决方案是使用一些同步机制,例如信号量或互斥量。
答案 1 :(得分:0)
使用sprintf
打印到字符串,然后在该字符串上使用printf
并使用fflush(stdout)
刷新到io流。这将使进程不会交错输出。
我认为这个问题是一个更大的问题,你想做什么?你能把子进程写到另一个文件吗?