別のスレッドからスレッドローカル変数を読み書きするにはどうすればよいですか? つまり、スレッド AI は、スレッド B のスレッド ローカル ストレージ領域にある変数にアクセスしたいと考えています。他のスレッドのIDはわかっています。
変数は__thread
GCC と同様に宣言されます。ターゲット プラットフォームは Linux ですが、独立していると便利かもしれません (ただし、GCC 固有のものは問題ありません)。
スレッド開始フックがないため、各スレッドの開始時にこの値を単純に追跡する方法はありません。すべてのスレッドをこの方法で追跡する必要があります (特別に開始されたスレッドだけではありません)。
boost thread_local_storage や pthread キーの使用などのより高いレベルのラッパーはオプションではありません。真の__thread
ローカル変数を使用するパフォーマンスが必要です。
最初の答えは間違っています: 私がやりたいことにグローバル変数を使用することはできません。各スレッドには、変数の独自のコピーが必要です。さらに、これらの変数は__thread
、パフォーマンス上の理由から変数でなければなりません (同様に効率的なソリューションも問題ありませんが、私は何も知りません)。また、スレッドのエントリ ポイントも制御しないため、これらのスレッドが何らかの構造を登録する可能性はありません。
Thread Local is not private : スレッドローカル変数に関する別の誤解。これらは、スレッドのプライベート変数ではありません。それらはグローバルにアドレス指定可能なメモリであり、その有効期間はスレッドに関連付けられているという制限があります。これらの変数へのポインターが与えられた場合、任意のスレッドの任意の関数が変数を変更できます。上記の質問は、基本的にそのポインターアドレスを取得する方法に関するものです。