多執行緒中棧與堆是公有的還是私有的

2022-11-11 10:56:45 字數 1286 閱讀 7244

1樓:翲燚

棧是私有的,每個執行緒都有自己的棧。堆是公有的,同一程序中的不同執行緒可以通過堆共享資料。

多執行緒中棧與堆是公有的還是私有的

2樓:匿名使用者

每個執行緒私有的資源只有的棧和程式計數器:棧記憶體用來記錄執行緒的執行歷史、程式計數器用來儲存執行緒的執行位置,其他的資源(比如:檔案控制代碼、全域性變數、堆記憶體)都是所有執行緒共享的。

多執行緒中棧與堆是公有的還是私有的

3樓:匿名使用者

在多執行緒環境下,每個執行緒擁有一個棧和一個程式計數器。棧和程式計數器用來儲存執行緒的執行歷史和執行緒的執行狀態,是執行緒私有的資源。其他的資源(比如堆、地址空間、全域性變數)是由同一個程序內的多個執行緒共享。

多執行緒中棧與堆是公有的還是私有的

4樓:suvg大耳朵

堆疊一定是私有的,這樣才不會互相干擾導致混亂,每個執行緒有自己的堆疊

多執行緒中棧與堆是公有的還是私有的

5樓:匿名使用者

堆疊一定是私有的,這樣才不會互相干擾導致混亂,每個執行緒有自己的堆疊

多執行緒中棧與堆是公有的還是私有的

6樓:

一般來說棧是私有的堆是共有的但是你可以為特定的執行緒建立私有的堆

j**a多執行緒中每一個執行緒都有自己的棧和堆嗎

7樓:匿名使用者

棧肯定是有的,一個方法呼叫另一個方法,就會產生棧那樣的結構,我看過的理論好像是

堆的話,好像是全域性一個,所有 用new生成的物件,都儲存在堆裡。

但是 按照這種理論,我也有點不懂的地方。 以垃圾**的理論來看的話,最好的方法是 一個棧對應一個堆,然後方法棧執行完畢,清空這一個堆,垃圾**舊算完了。這樣的方式 感覺比單純一個全域性的堆 要好。

全域性一個堆的話, 要維護 每個執行緒對應的 記憶體物件,垃圾** 還得針對每一個執行緒,感覺有點複雜。

全域性的堆 肯定是有一個的,維護那些 靜態變數的 記憶體,公有的一些物件。

其實我也不怎麼懂 jvm裡面 具體的記憶體分配策略。 可是是錯的

8樓:枚飛躍

每個執行緒對方法操作的時候都會獨立開闢一個屬於自己的棧空間,這個獨立的棧空間裡面有區域性變數

9樓:匿名使用者

棧是私有的,堆一般是公用的。

多執行緒中Semaphore,mutex和lock的區別

mutex互斥體只用於保護臨界區的 訪問共享資源 而不用於鎖之間的同步,即一內 個執行緒釋放容mutex鎖後,馬上又可能獲取同一個鎖,而不管其它正在等待該mutex鎖的其它執行緒。semaphore訊號量除了起到保護臨界區的作用外,還用於鎖同步的功能,即一個執行緒釋放semaphore後,會保證正在...

關於c c 中多執行緒的使用

第一個出現那樣的錯誤,和執行緒排程是有關係,如果建立一個執行緒之後,讓主執行緒sleep 1000 就能的到你想要的結果,如下 sleep 1000 sleep 1000 第二問題 答案是可行的,看了下msdn 那裡面給的解釋是隻能傳一個引數 1 首先 printf 根據連結的執行時庫不同,是分擔執...