假設一個過程產生一個線程A和這個線程進一步產生一個新的線程B,現在假設線程A被殺害,然後將發生在線程B.什麼如果線程A在同一進程中被終止,線程B會發生什麼?
我覺得如果這些都是KLTs那麼肯定線程B將不會發生任何事情。並且對於ULT,線程B也不應該發生任何事情。B
假設一個過程產生一個線程A和這個線程進一步產生一個新的線程B,現在假設線程A被殺害,然後將發生在線程B.什麼如果線程A在同一進程中被終止,線程B會發生什麼?
我覺得如果這些都是KLTs那麼肯定線程B將不會發生任何事情。並且對於ULT,線程B也不應該發生任何事情。B
沒有。在分叉過程中發生的事情是,線程B首先獲得對線程A的頁表(虛擬內存引用)的引用。只要A或B中的這些頁表發生變化,就會創建一個副本(對於每個頁面)並提供給它們。在這種情況下,B將只繼承所有的頁表,並做它自己的事情。
你確定當一個線程創建另一個線程時使用fork(),並且每個線程都有與之關聯的頁表嗎? – Luv
那麼你可以使用fork或execv。區別在於分配內存的方式。在fork中,頁表被繼承,而在execv中,新的內存被賦予進程。是的,每個線程都有與之關聯的頁表。 –
線程B將繼續執行。線程在火災中工作,忘記方式。 –