Oracle® Solaris Studio 12.4: C ユーザーガイド

印刷ビューの終了

更新: 2014 年 12 月
 
 

2.3 スレッドローカルな記憶領域指示子

スレッドローカルの変数を宣言して、スレッドローカルストレージを利用します。スレッドローカルな変数の宣言は、通常の変数宣言に変数指示子 __thread を加えたものから成ります。詳細については、-xthreadvar[=o] を参照してください。

__thread 指示子は、コンパイル対象のソースファイルにあるスレッド変数の最初の宣言に含める必要があります。

__thread 指示子を使用できるのは、静的記憶領域を持つオブジェクトの宣言内だけです。スレッド変数を静的に初期化する方法は、静的記憶領域のほかのオブジェクトの場合と同じです。

__thread 指示子で宣言する変数は、__thread 指示子なしで宣言する場合と同じリンカー結合を持っています。初期設定子のない宣言など、一時的な定義が含まれます。

スレッド変数のアドレスは定数ではありません。したがって、スレッド変数のアドレス演算子 (&) は実行時に評価され、現在のスレッドのスレッド変数のアドレスが返されます。結果的に、静的記憶領域のオブジェクトはスレッド変数のアドレスに動的に初期化されます。

スレッド変数のアドレスは、対応するスレッドの有効期間の間は安定しています。変数の有効期間内は、プロセス内の任意のスレッドがスレッド変数のアドレスを自由に使用できます。スレッドが終了したあとは、スレッド変数のアドレスを使用できません。スレッドの終了後は、そのスレッドの変数のアドレスはすべて無効となります。