0

私は 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 

勝ったボードを印刷するときに、他のプロセスが印刷を停止するのを止める方法はありますか?

4

2 に答える 2

2

同時に実行されるため、異なるプロセスでprintステートメントが重複することは絶対に正常です。プリントを他のプロセスとオーバーラップさせたくないプロセスでは可能wait()ですが、同時実行性が失われる場合があります。

別の解決策は、セマフォやミューテックスなどの同期メカニズムを使用することです。

于 2013-03-04T21:35:57.183 に答える
0

を使用して文字列に出力し、その文字列で をsprintf使用して io ストリームにフラッシュします。これにより、プロセスが出力をインターリーブしなくなります。printffflush(stdout)

この問題はもっと大きな問題だと思いますが、何をしようとしていますか? 子プロセスを別のファイルに書き込めますか?

于 2013-03-04T21:38:28.317 に答える