2010-06-01 84 views
0

我做了一個搜索,但找不到任何東西。我正在閱讀一篇論及線程共享堆棧位置的論文......我想知道如何以及爲什麼需要這樣做。任何例子將不勝感激。線程共享堆棧位置?

非常感謝。

+0

你提到的論文是......? – 2010-06-01 13:19:30

+0

如果論文沒有回答這個問題,我會說這不是一篇很好的論文。 – danben 2010-06-01 13:21:48

+0

它的內容如下:「我們維護通過堆棧指針之外的寄存器訪問堆棧位置的集合,但這是實現的人爲因素,而不是故意計劃支持在線程之間共享堆棧位置的程序。」 本文標題爲:「橡皮擦:多線程程序的動態數據競賽探測器」 我明白這個語句的內容,但我想知道是否可以共享堆棧位置? – Achilles 2010-06-01 13:30:24

回答

1

如果您在棧上聲明一個變量並將其地址傳遞給另一個線程,那麼您基本上共享一個棧位置。這就是論文所描述的嗎?

或者是提到操作系統支持的文件,使得使用相同堆棧的線程保持EIP/SP等?看起來像是一個等待我發生的問題。我想你可以這樣做,以確保當你知道你的代碼的約束時,每個線程都不會浪費堆棧空間,但看起來像是一種矯枉過正。

+0

它沒有詳細說明任何內容,並且我個人認爲堆棧應該是每個線程都是私有的,但是有沒有人在實踐中做到這一點?我的意思是共享堆棧位置? – Achilles 2010-06-02 16:05:25

+0

進程中的所有線程都可以訪問整個進程的虛擬地址空間 - 因此沒有位置是真正的「每棧」私有的。 系統通過在不同位置存儲每個堆棧幀的EIP/SP和局部變量(堆棧空間在創建線程時初始化)並提供像TLS(線程本地存儲)這樣的工具來嘗試模擬每個線程的私有空間,但無論如何,它最終只是一個幻想。一個巧妙製作的程序當然可以使用相同的堆棧位置來存儲共享數據。在Windows中,您可以在線程創建時指定堆棧大小。 – Alienfluid 2010-06-04 00:10:19