我有這個我無法理解的代碼。我了解 fork() 的基礎知識,但我不了解此程序的層次結構樹。代碼是這樣的:
main()
{
fork();
if(fork()){
printf("A");
}
else{
printf("B");
}
}
輸出是 AAB B。這是怎么發生的?我明白為什么 A 被列印兩次但為什么 B 被列印?層次樹在這里是如何作業的?
uj5u.com熱心網友回復:
好的,讓我們“繪制”這個程式創建的行程樹(P
用于父行程和C
子行程):
叉() ^ / \ | | 個人電腦 | | /------------/ \------------\ | | 叉叉 ^ ^ / \ / \ | | | | 個人電腦 | | | | /-----/ \----\ /-----/ \----\ | | | | printf("A") printf("B") printf("A") printf("B")
首先是fork()
無條件。這意味著父行程和子行程都通程序式繼續在同一路徑上。
然后是第二個fork()
電話。原來的父母和孩子都做這個分叉。在新的分叉中,新的父行程將有一個非零回傳值,這意味著條件是true
并且它們將列印"A"
。新的子行程將回傳零值,即false
它們將繼續列印"B"
。
行程運行的確切順序是未指定的,因此確切的輸出將是不可預測的。但它會列印"A"
兩次和"B"
兩次。
uj5u.com熱心網友回復:
輸出是 AABB -> 由于并發性,輸出在運行之間可能會有所不同我有這個
所以邏輯如下:第一個 fork 在第一個 fork 之后再創建一個行程來執行相同的程式,并且兩個行程中的每一個都創建一個多行程,該行程列印B
然后A
自己列印所以你總共得到 4 個行程
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/472981.html