Fork()导致print语句重叠

时间:2013-03-04 21:30:37

标签: c fork

我使用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 

当我打印获奖板时,有没有办法阻止其他进程停止打印?

2 个答案:

答案 0 :(得分:2)

在不同进程中重叠print语句是绝对正常的,因为同时运行。您可以wait()来处理您希望不与其他进程重叠打印的进程,但是如果您将失去并发性。

另一种解决方案是使用一些同步机制,例如信号量或互斥量。

答案 1 :(得分:0)

使用sprintf打印到字符串,然后在该字符串上使用printf并使用fflush(stdout)刷新到io流。这将使进程不会交错输出。

我认为这个问题是一个更大的问题,你想做什么?你能把子进程写到另一个文件吗?