fork()
İlkel genellikle hayal gücünü zorlayacak. Bir fikir edinene kadar, her işlemin ne olduğunu kağıt üzerinde izlemeli ve süreç sayısını hesaba katmalısınız. Fork () öğesinin geçerli sürecin mükemmel bir kopyasını oluşturduğunu unutmayın. En önemli fark (çoğu amaç için) fork()
dönüş değerinin ebeveyn ve çocuk arasında farklılık göstermesidir. (Bu kod dönüş değerini yok saydığından fark etmez.)
İlk başta bir süreç var. Bu, her ikisi de nokta ve döngü basan ikinci bir işlem oluşturur. İkinci yinelemelerinde, her biri başka bir kopya oluşturur, bu nedenle bir nokta yazdırıp çıkacak dört işlem vardır. Böylece, beklediğiniz gibi altı noktayı kolayca hesaplayabiliriz.
Ancak, printf()
gerçekten yaptığı şey çıktısını tamponlamaktır. Bu nedenle, sadece iki işlemin yapıldığı ilk nokta yazıldığında görünmez. Bu noktalar tamponda kalır (çatalda () çoğaltılır). İşlem, arabelleğe alınan noktanın görünmesi bitene kadar değildir. Tamponlanmış bir nokta basarken dört işlem, artı yeni nokta 8 nokta verir.
O davranıştan kaçınmak istiyorsa, çağrı fflush(stdout);
sonra printf()
.