c程式問題 作業系統

int value=5;

int main()

{

pid.t pid;

pid = fork();

if (pid == 0)

value +=15;

else if ( pid > 0)

wait(null);

pritf("parent: value = %d",value);

exit(0);

}

}

最近在學作業系統 這是裡面的一題

不過我看了很久 都看不太懂 最後的 value 是指什麼意思

可以請各位高手能夠幫我一下

給我一些提示嗎

Update:

那可以請問一下 最後的value 會出現甚麼值嗎 又是怎麼出現的呢

1 Answer

Rating
  • 丸子
    Lv 4
    1 decade ago
    Favorite Answer

    int value=5;

    int main()

    {

    pid_t pid;

    pid = fork(); // create a new child process

    if (pid == 0) // if return child process

    value +=15;

    else if ( pid > 0) { // if return parent process

    wait(null); // wait until child process terminated or stop

    pritf("parent: value = %d",value);

    exit(0);

    }}

    這個程式主要在測試 fork() system call. 假設fork()所在的程式為 parent process, 當呼叫 fork() 這支函式時, 程式會從呼叫點開始創造並複製一個新的 child process. child process 與 parent process 之間大致有幾個特性:

    1. child process和parent process 各自獨立, 擁有各自的記憶體空間, process ID

    2. child process和parent process的內容完全相同, 在 fork()之前所有值都相同, 但各自擁有一份. fork()之後各自獨立執行, 若 parent的值修改, 並不會影響到child, 反之亦然.

    由於parent/child是一模一樣的東西, 因此在程式中只能依靠獨立的pid 來判斷現在執行的是哪個process.

    若 pid 回傳 0, 表示 child process; 回傳 1 時, 表示parent process; 若回傳負值, 則表示 child process create 失敗.

    你可以試著將兩個 process 的 value 都印出來觀察, 就可以發現兩者值修改並不會互相干擾.

    2008-04-09 22:14:11 補充:

    parent process 會等待 child process執行完後才執行, 所以假設將child/parent值 output, 會依序得到下列值

    child process value = 20

    parent process value = 5

    2008-04-09 22:20:04 補充:

    parent process會等到child process執行完後才執行, 假設將child/parent value output觀察, 會依序得到下列值:

    child process value=20

    parent process value=5

    Source(s): no, no
Still have questions? Get your answers by asking now.