2011-01-24 23 views
0

對不起,這個意義上說,似乎就是無法做出什麼在這個小片的C事情的意義:一段簡單的CI不能做的

#include <stdio.h> 

    main() 
    { 
     int i; 
     if (fork()) { /* must be the parent */ 
      for (i=0; i<1000; i++) 
      printf("\t\t\tParent %d\n", i); 
     } 
     else { /* must be the child */ 
      for (i=0; i<1000; i++) 
       printf("Child %d\n", i); 
     } 
    } 

據我瞭解,它會打印1000次孩子和1000次父母,但顯然它要複雜得多,我必須完全理解它!請有人能向我解釋嗎?另外,我將如何更改程序,使父母和孩子執行不同的計算?

非常感謝本您的幫助:)

+1

這看起來像普通的C.如果這是C++,不要將它標記爲C.儘管有祖先關係,但它們不是同一種語言。 – 2011-01-24 22:21:40

+0

FWIW,`fork()`是一個系統函數,不是標準的C++。 – 2011-01-24 22:22:11

回答

4

fork()創建一個新進程。所以從這一點開始,將會有兩個獨立的進程從fork()所在的代碼點繼續。在主進程中,fork()返回新的子進程的PID,並在子進程中返回零。所以代碼將在不同的進程中執行if語句的不同分支。

請注意,新進程與線程不同。這些進程不會有任何共同的全局變量或類似的事物,但它們是完全獨立的。但他們否則他們是相同的。

1

fork()函數產生一個新的進程,與原來的「父」進程的內存的精確拷貝。這兩個過程都從同一點繼續執行,但fork()爲子級返回0,父級爲非零。所以父節點執行第一個循環,並且子節點執行第二個循環。

請注意,由於父和子之間沒有任何同步,因此您看到屏幕上顯示的字符串的順序基本上是隨機的。

1

fork()函數生成所謂的子進程。子進程首先是名爲fork()的進程的克隆。它甚至在父進程停止的地方開始執行,這是在調用fork()後立即執行的。

唯一的區別是fork()將返回父進程的true(或零)和子進程的false(或非零)。這意味着父進程在調用fork()後將執行條件的第一部分。子進程將開始執行條件的第二部分。

每個人將按照操作系統預定的時間打印1000次,並且每個人在到達主方法結束時最終都會終止。