スレッド ローカル ストレージ (TLS: Thread Local Storage)
スレッド ローカル ストレージ (TLS) は、マルチスレッド プロセスの各スレッドが、スレッド固有のデータを格納するための場所を割り当てる手段です。動的にバインド (実行時に)スレッド仕様のデータは、 TLS API ([TlsAlloc]、 [TlsGetValue]、 [TlsSetValue]と [TlsFree])を通じてサポートされます。Win32 と Visual C++ コンパイラは、既存の API 実装に加えて、スタティック (読み込み時) に連結されるスレッド単位のデータをサポートしています。
API による TLS の実装
スレッド ローカル ストレージは、Win32 API レイヤーとコンパイラで実装されます。詳細については、 [TlsAlloc]、 [TlsGetValue]、 [TlsSetValue]と [TlsFree]については、 Win32 API のドキュメントを参照してください。
Visual C++ コンパイラには、TLS の操作を、API レイヤーを使用せず、自動的に行うことができようにするキーワードが用意されています。次のセクションでは、このキーワードの構文を説明します。
コンパイラによる TLS の実装
TLS をサポートする新しい属性 thread が C 言語と C++ 言語に追加され、また Visual C++ コンパイラもこの属性をサポートしています。この属性は既に説明したように、拡張ストレージ クラス修飾子です。thread 変数は、__declspec キーワードを使って宣言します。たとえば、次に示すコードは、整数型のスレッド ローカル変数を宣言して特定の値に初期化します。
__declspec( thread ) int tls_i = 1;