thread
Microsoft 專有的
執行緒延伸的儲存類別修飾詞用來宣告執行緒區域變數。
__declspec( thread ) declarator
備註
執行緒本機存放區 (TLS) 是多執行緒的處理序中的每個執行緒會存放配置的執行緒特定的資料的機制。在一般多執行緒程式中資料之間共用所有執行緒的指定的處理序,而執行緒區域儲存區是配置每一執行緒資料的機制。執行緒的完整討論,請參閱多執行緒處理。
執行緒區域變數的宣告必須使用的延伸的屬性語法和__declspec關鍵字執行緒關鍵字。例如,下列程式碼宣告整數執行緒區域變數,並使用值將它初始化:
__declspec( thread ) int tls_i = 1;
宣告執行緒區域物件和變數時,您必須遵守這些指導方針:
您可以套用執行緒屬性僅供資料宣告和定義,就不具有成員函式 ; 類別 執行緒不能使用於函式宣告或定義。
使用執行緒 屬性可能會干擾 延遲載入 DLL 的匯入**.**
您可以指定執行緒只能在靜態分割工期的任務資料欄位的屬性。這包含全域資料的物件 (兩者都靜態和extern),本機的靜態物件,與類別的靜態資料成員。您不能宣告具有自動資料物件執行緒屬性。
您必須使用執行緒的執行緒區域物件,定義和宣告的屬性,是否會發生在同一個或多個個別檔案中宣告和定義。
您不能使用執行緒為型別修飾詞的屬性。
唯一的 POD 類別可能會使用執行個體化 __declspec(thread)。如果物件不宣告為類別宣告的一部分,則會忽略執行緒屬性。例如:
// declspec_thread.cpp // compile with: /LD __declspec(thread) class X { public: int I; } x; // x is a thread object X y; // y is not a thread object
因為所使用的物件宣告執行緒屬性所允許的這兩個範例是語意上相同:
// declspec_thread_2.cpp // compile with: /LD __declspec( thread ) class B { public: int data; } BObject; // BObject declared thread local. class B2 { public: int data; }; __declspec( thread ) B2 BObject2; // BObject2 declared thread local.
標準的 c 允許為物件或變數的初始化使用的運算式包含參照至它本身,但僅適用於非靜態範圍的物件。雖然 C++ 一般允許這種物件的動態初始化,包含對本身參考的運算式,用於執行緒區域物件不允許這種類型的初始化。例如:
// declspec_thread_3.cpp // compile with: /LD #define Thread __declspec( thread ) int j = j; // Okay in C++; C error Thread int tls_i = sizeof( tls_i ); // Okay in C and C++
請注意, sizeof ,其中包含已初始化物件的運算式無法構成對其本身的參考,且允許在 c 和 C++ 中。
結束 Microsoft 特定