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