スレッド ローカル ストレージ (TLS: Thread Local Storage)

更新 : 2007 年 11 月

スレッド ローカル ストレージ (TLS) は、マルチスレッド プロセスの各スレッドが、スレッド固有のデータを格納するための場所を割り当てる手段です。(実行時に) 動的にバインドされたスレッド固有のデータは、TLS API (TlsAllocTlsGetValueTlsSetValue、および 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;

参照

概念

C と Win32 を使用するマルチスレッド

規則と制約 (TLS)