Oracle Solaris Studio 12.2: C ユーザーガイド

B.2.151 -xthreadvar[= o]

スレッドローカルな変数の実装を制御するには -xthreadvar を指定します。コンパイラのスレッドローカルな記憶領域機能を利用するには、このオプションを __thread 宣言指示子と組み合わせて使用します。__thread 指示子を使用してスレッド変数を宣言したあとは、-xthreadvar を指定して動的 (共有) ライブラリの位置に依存しないコード (PIC 以外のコード) でスレッド固有の記憶領域を使用できるようにします。__thread の使用方法の詳細については、「2.3 スレッドローカルな記憶領域指示子」を参照してください。

o には、次のいずれかを指定します。

表 B–42 -xthreadvar のフラグ

フラグ  

意味  

[no%]dynamic

動的ロード用の変数をコンパイルします [しません]。-xthreadvar=no%dynamic を指定すると、スレッド変数へのアクセスは非常に早くなりますが、動的ライブラリ内のオブジェクトファイルは使用できません。すなわち、実行可能ファイル内のオブジェクトファイルだけが使用可能です。

-xthreadvar を指定しない場合、コンパイラが使用するデフォルトは位置独立コード (PIC) が有効になっているかどうかによって決まります。位置独立コードが有効になっている場合、オプションは -xthreadvar=dynamic に設定されます。位置独立コードが無効になっている場合、オプションは -xthreadvar=no%dynamic に設定されます。

値を指定しないで -xthreadvar を指定すると、オプションは -xthreadvar=dynamic に設定されます。

動的ライブラリ内に位置に依存するコードがある場合、-xthreadvar を指定する必要があります。

リンカーは、動的ライブラリ内の位置依存コード (非 PIC) スレッド変数と同等のスレッド変数はサポートできません。非 PIC スレッド変数は非常に高速なため、実行可能ファイルのデフォルトとして指定できます。

異なるバージョンの Solaris ソフトウェアでスレッド変数を使用するには、コマンド行で異なるオプションを指定する必要があります。

関連項目: -xcode-KPIC-Kpic