程序狀態的以下哪些組件是在多線程進程中的線程之間共享的?程序狀態的哪些組件是通過多線程進程中的線程共享的?
- 寄存器值
- 堆內存
- 全局變量
- 棧內存
我的建議;只有全局變量,全局變量分配在堆上?所以堆內存和全局變量。它是否正確?
程序狀態的以下哪些組件是在多線程進程中的線程之間共享的?程序狀態的哪些組件是通過多線程進程中的線程共享的?
我的建議;只有全局變量,全局變量分配在堆上?所以堆內存和全局變量。它是否正確?
堆內存總是。
全局變量取決於平臺,通常它們是共享的。
堆棧是線程特定的,以及寄存器。
這取決於語言和線程的實現。例如,我不認爲即使C可以讓你直接訪問CPU寄存器,所以不管pthreads是否共享寄存器(這在記錄中,我相當肯定它沒有),都是很不實際的。同樣在C中,全局變量是而不是實際上是在堆上分配的,儘管它們可能是其他語言。
堆棧更復雜。在C/pthreads中,每個線程都有自己的堆棧,但在其他語言和線程模型中,情況可能會更加複雜,因爲底層堆棧模型可能並不那麼簡單。
您可以使用C語言中的內聯彙編來訪問寄存器,但它會開始失去它的名稱「便攜式彙編」。 – NVRAM 2009-11-10 21:35:38
堆棧:沒有
寄存器:沒有
堆:是的(如果你要選擇y或n,真正的答案是它依賴)
全局:是
的全局值和堆內存在多線程進程中共享。寄存器值和堆棧內存對每個線程都是私有的。
在linux上共享? – Algific 2009-11-10 21:21:41
@data_jepp是的,在Linux上共享。如果你想擁有線程本地的「全局」變量,你可以使用pthread_ *函數分配線程本地存儲。 – 2009-11-10 21:33:15