-ftls-model (-qtls)
カテゴリー
プラグマ同等物
なし。
目的
スレッド・ローカル・ストレージが割り振られる変数を指定 する __thread ストレージ・クラス指定子の認識を使用可能にし、使用するスレッド・ローカル・ストレージ・モデルを指定する。
このオプションが有効な場合、__thread ストレージ・クラス指定子によってマークされた変数はマルチスレッド・アプリケーションでそれぞれのスレッドに対してローカルとして取り扱われます。実行時に、変数にアクセスする各スレッドにその変数のコピーが作成され、その変数のコピーはスレッドが終了すると破棄されます。スレッド・ローカル・ストレージでは、 ご使用のアプリケーションを並列化するために使用できる他の高水準の構造体と同様に、 スレッドを低水準で同期化することなく、グローバル・データに対する競合状態を回避できます。
サブオプションを使用すると、スレッド・ローカル・ストレージ・モデルを指定することができます。これによって、パフォーマンスは向上しますが、適用可能性は制限されます。
構文
.-tls-model--+-=global-dynamic-+-. | +-=local-dynamic--+ | | +-=initial-exec---+ | | '-=local-exec-----' | >>- -f--+-no-tls-model-------------------+---------------------><
.-=default--------. .-tls--+-=global-dynamic-+-. | +-=initial-exec---+ | | +-=local-exec-----+ | | '-=local-dynamic--' | >>- -q--+-notls--------------------+---------------------------><
デフォルト
-qtls=default
サブオプションなしで -qtls を指定することは、-qtls=default を指定することと同等です。
-ftls-model のデフォルト設定は、-qtls のデフォルト設定と同じです。
パラメーター
- default (-qtls のみ)
- -fPIC (-qpic) オプションの設定に応じて適切なモデルを使用します。これによって位置独立コードを生成するかどうかが判別されます。-fPIC (-qpic) が有効な場合、このサブオプションは結果として -qtls=global-dynamic になります。-fno-pic (-fno-PIC、-qnopic) が有効な場合、このサブオプションは結果として -qtls=initial-exec になります。
- global-dynamic
- このモデルは最も一般的で、すべてのスレッド・ローカル変数に使用することができます。
- initial-exec
- このモデルを使用すると、グローバルに動的またはローカルに動的なモデルよりもパフォーマンスを向上させることができます。またこのモデルは、動的にロードされたモジュールで定義されたスレッド・ローカル変数に使用することができます。ただし、これらのモジュールは実行可能ファイルと同時にロードされていなければなりません。 つまり、このモデルは、dlopen によってロードされないモジュールにおいて、すべてのスレッド・ローカル変数が定義されるときにのみに使用することができます。
- local-dynamic
- このモデルを使用すると、グローバルに動的なモデルよりもパフォーマンスを向上させることができます。またこのモデルは、動的にロードされたモジュールで定義されたスレッド・ローカル変数に使用することができます。ただし、このモデルは、スレッド・ローカル変数へのすべての参照がその変数が定義されるのと同じモジュール内に含まれている場合にのみ使用することができます。
- local-exec
- このモデルのパフォーマンスはすべてのモジュールの中では最高ですが、このモデルを使用できるのは、主な実行可能ファイルがすべてのスレッド・ローカル変数を定義して参照するときのみです。
事前定義マクロ
なし。