
這段代碼我算的行程數結果為39 。
為啥答案是20 。
uj5u.com熱心網友回復:
創建了20個子行程?我啥我認為就創建了3個呢?
uj5u.com熱心網友回復:
哦,不好意思,理解錯了uj5u.com熱心網友回復:
那到底多少個呢uj5u.com熱心網友回復:
這個題考察了兩個問題:1. fork函式回傳值的問題。在父行程中回傳子行程的PID,在子行程中回傳0,出錯回傳-1.
2. 就是 A && B || C; 這個陳述句怎么執行。
2.1 A為假,則不需要判斷B,直接判斷C
2.2 A為真,分為兩種情況
2.2.1 B為真,此時不需要判斷C
2.2.2 B為假,此時還需要繼續判斷C。
下面只要分析 fork()&&fork()||fork(0; 執行后產生多少子行程即可。

uj5u.com熱心網友回復:
上面解釋了 fork()&&fork()||fork(); 會產生4個子行程。再來看代碼:
...
fork(); (1)
fork()&&fork()||fork(); (2)
fork(); (3)
...
(1) 陳述句執行結束后會產生一個子行程。總共有兩個行程,一個新產生的子行程,一個是父行程。
(2)陳述句執行時,從上面分析可知每個行程執行(2)陳述句后都會產生4個子行程。而(1)執行結束后總共有2個行程,所以執行(2)后產生了8個子行程
(3)陳述句執行時,程式中行程數為 1+1+8 = 10. 所以執行(3)陳述句后每個行程都會產生一個子行程,所以總共有20個行程。
去掉main行程本身,產生了19個新行程
uj5u.com熱心網友回復:
上面分析應該是很清晰的,不知是否理解。uj5u.com熱心網友回復:
你說的這個我清楚了,謝謝你。我當時卡在中途 fork()&&fork()||fork(0) 這個部分。
誤認為一個行程產生子行程后,包括自己就有三個行程。
其實就是產生了一個子行程而已,不過習慣把現在的自己和之前的自己區分開來,說成子行程,但是同樣的。
所以按照你說的是正解。thanks!
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/11324.html
標籤:應用程序開發區
上一篇:Binder需求建議
下一篇:Ubuntu執行apt就報錯
