我對C中的多線程是新手,想知道如何在線程間共享函數中聲明的共享(非全局和非靜態)變量。我知道,我們可以像線程如何知道共享變量的地址
a = (int *)malloc(sizeof(int));
聲明像
int a;
或動態的既簡單變量共享data.But,目前尚不清楚什麼對我是如何在各種情況下的編譯器行爲?
1)它是否將在其線程堆棧內創建的變量的地址賦予其他線程?
2)如何動態分配變量?它的指針是否廣播?或者指針保存在.DATA或.BSS中的某個地方?
在此先感謝
我不是一個熟練的人,但我認爲在單個OS進程中,所有線程共享相同的內存映射。在一個線程上分配的內存不在不同的位置,或者以不同的方式進行管理,從分配在任何其他線程上的內存中,對嗎?我意識到需要做的唯一的區別是單線程公寓(STA),其中需要一些限制來控制哪些函數被允許操縱在這些線程中創建的資源(窗口,圖形對象等)在另一個... – 2014-10-20 16:22:30
每個線程都有自己的堆棧,但共享堆。 – user3684042 2014-10-20 16:28:38
但是,不是每個線程的堆棧仍然是由OS發佈到所有線程駐留的進程所在的同一內存映射的一部分嗎?即如果一個線程具有來自另一個線程的變量的虛擬地址,則它不需要對操作系統進行「thunk」以獲得實際的物理地址來訪問它。 – 2014-10-20 16:35:10