C 多執行緒中,執行緒類的成員變數屬於哪個執行緒?

時間 2021-06-05 11:37:02

1樓:XZiar

先搞清執行緒和程序的關係唄。

程序是系統管理資源的最小單位,執行緒是系統排程/CPU上執行的最小單位。

所以什麼記憶體空間、變數之類的資源,本來就是「不屬於某個執行緒」的,自然可以隨意訪問。

每個執行緒有自己的呼叫棧,但這實質上還是開闢執行緒時申請的一塊記憶體,關鍵是在於棧指標(放在暫存器裡)。(threadlocal其實也是同理)

而暫存器的確可以說是「屬於某個執行緒」,你不能從乙個執行緒訪問另乙個執行緒的eax,哪怕是手寫機器碼也不行(GPU另說)。但好在你能取位址的東西必然在記憶體裡有個位置,所以你不用擔心這個。

暫存器資料會在切換執行緒時備份/恢復,這個放置備份資料的地方又屬於大家共享的記憶體了,只不過可能使用者態不給訪問(核心態/使用者態這個又是另一碼事了)。

另外哪怕是託管語言,大致上也是遵守這一規則的。有時候跨執行緒訪問會拋異常,那也是主動檢查的結果。

2樓:周八皮

所有的變數,任何變數,任何函式,從來沒有屬於哪個執行緒一說,只能說哪個執行緒訪問或者呼叫一說,比如說我有個變數,我可能A執行緒訪問,也可能B執行緒訪問

進入GPU渲染時代的C4D,對多核多執行緒cpu的需求降低了嗎?

YQ4869 沒有不想扯理論之類的,從工作場景出發的話,就做室內設計目前的情況而言GPU渲染還是很尷尬 R19試用之後感覺只是初步引入了GPU渲染的概念,類似比較高完成度的demo而已,用一下可以,但是用來完整的挑工作流程還是不方便 真正完善支援GPU渲染的渲染器多半是第三方,阿諾德用的人少,OC不...

如何理解 NVIDIA CUDA 中線程塊的三維線程的概念?

首先需要補一下 Nvidia GPU 體系結構的基礎知識 1.GPU 有很多 Streaming Multiprocessors,用來管理排程 Thread Block 2.每個 Stream Multiprocessor 裡有很多 Stream Processor 也叫 CUDA Core 管理排...

想接觸C 多執行緒程式設計,需要從哪方面入手,有沒有推薦的書籍或教程?

已重置 1.學習執行緒同步技能,說白了就是 鎖 2.學習把物件轉成空型別指標 void 再把指標還原對有型別的指標 巴斯特,多謝指出錯誤。3.學習寫靜態函式,類靜態函式,或全域性函式4.寫個函式,CreateThread,那些什麼beginthread啦,threadpool,CThread,QTh...