共用方式為


線程本機記憶體

進程的所有線程都會共用其虛擬位址空間。 函式的局部變數對執行函式的每個線程而言都是唯一的。 不過,靜態和全域變數是由進程中的所有線程共用。 透過 線程本機記憶體 (TLS),您可以為每個線程提供唯一的數據,讓進程可以使用全域索引存取。 一個線程會配置索引,其他線程可以使用該索引來擷取與索引相關聯的唯一數據。

常數TLS_MINIMUM_AVAILABLE會定義每個進程中可用的 TLS 索引數目下限。 所有系統保證此最小值至少為 64。 每個進程的索引數目上限為 1,088。

建立線程時,系統會為已初始化為 NULL 的 TLS 配置 LPVOID 值的陣列。 使用索引之前,必須先由其中一個線程配置索引。 每個線程都會將其數據儲存在數位中 TLS 位置 的 TLS 索引。 如果與索引相關聯的數據會放入 LPVOID 值,您可以直接將數據儲存在 TLS 位置中。 不過,如果您以此方式使用大量索引,最好配置個別的記憶體、合併數據,並將使用的 TLS 位置數目降到最低。

下圖說明 TLS 的運作方式。 如需說明線程本機記憶體使用方式的程式代碼範例,請參閱使用線程本機記憶體

顯示 T L S 程式運作方式的圖表。

進程有兩個線程:線程 1 和線程 2。 它會配置兩個索引來搭配 TLS、gdwTlsIndex1 和 gdwTlsIndex2 使用。 每個線程都會配置兩個記憶體區塊,其中一個用於儲存數據,並將這些記憶體區塊的指標儲存在對應的 TLS 位置中。 若要存取與索引相關聯的數據,線程會從TLS位置擷取記憶體區塊的指標,並將其儲存在 lpvData 局部變數中。

在動態連結庫 (DLL) 中使用 TLS 是理想的做法。 如需範例,請參閱動態連結庫中 使用線程本機記憶體

線程本機記憶體 (Visual C++)

使用線程本機記憶體

在動態連結庫 中使用線程本機記憶體