次の方法で共有


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

スレッド ローカル ストレージ (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;

参照

概念

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

規則と制約 (TLS)