2011-06-14 68 views
0

我知道線程和處理linux沒有什麼特別的區別,只是在進程切換期間保持cr3寄存器在線程切換和tlb刷新期間不變。關於linux中線程的混淆

由於groud中的線程共享相同的地址空間,並且pgd(page table)沒有改變意味着整個內存佈局是共享的,因此棧空間也被共享,但是根據通用定義線程擁有自己的棧,這在linux中如何實現。

如果它的threadA具有x-y範圍的堆棧,那麼在發生第一個頁面錯誤並且頁表被更新時,類似地,使用範圍u-v的threadB將更新相同的頁表。因此,可能會把threadA的threadB堆棧搞亂。

我只是想弄清楚這一點,幫我一把。這是線程的安全實現嗎?

回答

1

這是正確的,在線程之間沒有操作系統強制保護堆棧內存。一個線程A會破壞另一個線程B的堆棧(如果線程A知道內存中的外觀)。