-1

私はフォークを理解しています、理由を理解する助けが必要です

if(fork() && !fork())

最初の子プロセスの2番目のフォーク手順を評価しません。

親は[X|x> 0] ^![Y | y> 0]
を返しますchild.0は0を返し、2番目のフォークプロシージャを呼び出さない
child.1は[X | x> 0] ^!0を返します

child.0が2番目のフォークプロシージャを呼び出さないのはなぜですか?

ありがとう

4

4 に答える 4

2

の左側のオペランドが&&0(false)と評価された場合、右側のオペランドの値に関係なく、式全体が0(false)と評価されるため、右側のオペランドはまったく評価されません。

于 2013-02-04T20:18:21.773 に答える
0

演算子を使用していて&&、評価が0を返すとすぐに終了する場合。基本的に、左から右に実行する場合、&&演算子の場合は、0(またはfalse)が検出されるとすぐに終了します。

于 2013-02-04T20:18:30.970 に答える
0

ブール式は常に 0 であるため、最初の値が 0 を返した場合、2 番目の値fork()は呼び出されません。したがって、パフォーマンスを向上させるために、2 番目は短絡され、実行されません。fork()(0 && fork())fork()fork()

于 2013-02-04T20:20:36.383 に答える
0

fork() の戻り値は、子供が何かを返すと言ったときに、あなたが思うように子供が返すものではありません。確認するには、wait() を使用する必要があります。

于 2013-02-04T21:33:12.690 に答える