執行緒區域儲存區

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

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

建立執行緒時,系統會為 TLS 配置 LPVOID 值的陣列,這些值會初始化為 Null。 在可以使用索引之前,它必須由其中一個執行緒配置。 每個執行緒都會將其資料儲存在陣列中的 TLS 位置中的 TLS 索引。 如果與索引相關聯的資料會符合 LPVOID 值,您可以直接將資料儲存在 TLS 位置中。 不過,如果您以這種方式使用大量索引,最好是配置個別的儲存體、合併資料,並將使用的 TLS 位置數目降到最低。

下圖說明 TLS 的運作方式。 如需說明使用執行緒本機儲存體的程式碼範例,請參閱 使用執行緒本機儲存體

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

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

最好在動態連結程式庫中使用 TLS, (DLL) 。 如需範例,請參閱 在動態連結程式庫中使用執行緒本機儲存體

Visual C++ (執行緒本機儲存體)

使用執行緒本機儲存體

在動態連結程式庫中使用執行緒本機儲存體