作者numin (nu)
看板Grad-ProbAsk
標題[理工] [OS] 99暨大資工
時間Sun Nov 4 12:44:09 2012
題目:
What are the possible output of the following program?
(Assume the new process is created successfully.)
#include <sys/types.h>
#include <stdio.h>
#include <unistd.h>
int main()
{
int value=101;
if(fork()<=0)
{
value += 22;
printf("The value is %d\n",value);
}
else
{
printf("The value is %d\n",value);
wait(NULL);
}
printf("Over with %d\n",value);
}
解:
(1)
The value is 123
Over with 123
The value is 101
Over with 101
(2)
The value is 123
The value is 101
Over with 123
Over with 101
(3)
The value is 101
The value is 123
Over with 123
Over with 101
問題: 想請問以上三個答案是怎麼來的?
感謝各位耐心看完題目及問題,謝謝。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 123.193.221.223
推 Bearcome:第一個就子先全部印完 父才印 11/04 17:06
→ Bearcome:第二個就子印完123 還沒印OVER...就被父搶走印101 11/04 17:06
→ Bearcome:父還沒印OVER...就被子搶走印OVER 最後父印OVER 11/04 17:07
→ Bearcome:第二個說錯了 父有WAIT(NULL)要等子做完才能印OVER 11/04 17:08
→ Bearcome:第三個則是父先印101 還沒印OVER被子搶走印123 然後子印 11/04 17:09
→ Bearcome:OVER 父在印OVER 11/04 17:09
→ numin:感謝B大的回答。 11/04 20:53
→ numin:想請問如果父先印101,此時沒被子搶走,所以印OVER。然後子 11/04 20:54
→ numin:進印123,再印OVER,為什麼這種情況不能算? 11/04 20:55
推 Bearcome:父有WAIT 所以一定要等子做完123跟OVER 11/04 21:07
→ numin:嗯嗯,我懂了。謝謝B大的回答。 11/04 23:15
推 n810516:有用到給推 11/17 22:34