2012-05-29 30 views
1

假設一個過程產生一個線程A和這個線程進一步產生一個新的線程B,現在假設線程A被殺害,然後將發生在線程B.什麼如果線程A在同一進程中被終止,線程B會發生什麼?

我覺得如果這些都是KLTs那麼肯定線程B將不會發生任何事情。並且對於ULT,線程B也不應該發生任何事情。B

+2

線程B將繼續執行。線程在火災中工作,忘記方式。 –

回答

3

沒有。在分叉過程中發生的事情是,線程B首先獲得對線程A的頁表(虛擬內存引用)的引用。只要A或B中的這些頁表發生變化,就會創建一個副本(對於每個頁面)並提供給它們。在這種情況下,B將只繼承所有的頁表,並做它自己的事情。

+0

你確定當一個線程創建另一個線程時使用fork(),並且每個線程都有與之關聯的頁表嗎? – Luv

+2

那麼你可以使用fork或execv。區別在於分配內存的方式。在fork中,頁表被繼承,而在execv中,新的內存被賦予進程。是的,每個線程都有與之關聯的頁表。 –

相關問題