2010-02-17 97 views
1

線程有一個堆棧和一個進程有堆棧的策略是什麼。有關線程和進程堆棧的一個簡單問題

如果我們有10個過程,我們有多少個堆棧,10個?

如果我們在一個進程下有10個線程,我們有多少個棧?所有線程共享相同的堆棧?

謝謝!

回答

4

如果您考慮堆棧是什麼,共享堆棧沒有意義。

請記住,這是一個調用堆棧而不是數據結構。由於指令指針(指示要執行的指令)在程序中移動,它會遇到函數調用,在跳轉到被調用函數之前將當前上下文(本地變量,IP前的IP)放入堆棧。該函數使用堆棧的頂部作爲其局部變量等,當堆棧完成時,彈出堆棧,將原始函數的局部變量留在頂部,並將IP恢復到函數調用之後。

如果兩個線程具有相同的堆棧,它們將共享上下文,但它們可能具有不同的IP。如果其中一個線程調用了函數,那麼對於另一個線程(仍然在原始函數中),堆棧將不再有意義。如果IP是同步的,你沒有兩個不同的線程 - 你只是做了兩次。

正如其他人所說:每個線程一個堆棧,每個進程。

0

每個進程都有自己的堆棧。因此N(單線程)進程具有N個堆棧。

每個線程都有自己的堆棧。因此具有N個線程的進程具有N個堆棧。

+1

@nobugz,這是一個不必要的-1。他在回答中特別指出,*單線程*進程每個都有一個堆棧。 – 2010-02-17 20:30:25

2

每個線程一個堆棧。 5個進程有2個線程,每個等於10個堆棧。

2

線程 - >執行上下文 - >需要自己的資源 - >自己的堆棧。

+0

所以沒有他們共享一個堆棧的情況? – skydoor 2010-02-17 19:42:57

+0

不在我碰巧知道的系統中 - 或者,爲什麼會產生額外的開銷來嘗試描繪線程之間的調用棧?對我來說似乎是不必要的開銷。 – jldupont 2010-02-17 19:45:01