() çatal dalları beklenenden fazla?
Kod: aşağıdaki parça düşünün
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
int main(void)
{
int i;
for(i = 0; i < 2; i )
{
fork();
printf(".");
}
return 0;
}
Bu program 8 nokta verir. Bu nasıl mümkün olabilir? 6 nokta yerine, olmamalı mı?
CEVAP
fork()
ilkel sık sık hayal uzanır. Bunun için bir fikir elde edene kadar, her işlem ne kadar kağıt üzerinde izleme ve işlem sayısı için hesap. Bu çatal unutma() sürecin mükemmele yakın bir kopyasını oluşturur. En önemli fark (çok amaçlı) fork()
Bu değer, ebeveyn ve çocuk arasında farklı dönüş. Bu kodu dönüş değeri yok sayar (beri, hiç fark etmez.)
Yani, ilk başta, bir süreç var. Bu nokta ve bir döngü baskı hem de ikinci bir süreç oluşturur. İkinci yineleme, her bir kopyasını oluşturur, dört işlemler bir nokta yazdırmak ve çıkış vardır. Kolayca beklediğiniz gibi altı nokta hesap edebiliriz.
printf()
gerçekten ne yaptığını ancak, onun çıkış arabelleği. Sadece iki işlem vardı ilk nokta yazılı görünmüyor. Bu noktalardan tampon kalır-çatal yineleniyor. Süreci tamponlu nokta görünen çıkmak üzere kadar değil. Dört arabellekli bir nokta baskı işlemleri, yeni bir 8 nokta verir artı.
Eğer bu davranışı engellemek istiyorsa, fflush(stdout);
printf()
sonra Ara.
Nasıl bir taahhüt SVN - tek bir atışta...
Fiyat indirimi ve birden fazla dosya d...
jQuery Sıralanabilir - ve Birden fazla...
Mercurial: Dalları vs Birden çok Depol...
Konumlandırma birden fazla işaret aynı...