スレッドローカル変数について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
kunene

スレッドローカル変数について

#1

投稿記事 by kunene » 16年前

スレッドローカル変数について教えてください。

VisualC 2005 でスレッドローカル変数を使っています。
__decspec(thread)やTLS関数を使っています。

この方法だとすべてのスレッドで独立したスレッドローカル変数が使用できるのですが、
容量が大きくなりすぎるため
あるスレッドのみ、スレッドで独立したスレッドローカル変数を使えるようにしたいと思っています。

何か方法はありませんか?

あるスレッドとは、同じスレッドを複数起動します。
そのスレッドのみ、特定のスレッドローカル変数を使用したいのです。

以上、よろしくお願いします。

たかぎ

Re:スレッドローカル変数について

#2

投稿記事 by たかぎ » 16年前

TLSでポインタだけ用意しておき、大きなサイズの変数が必要なスレッドで動的に割付けるというのはどうでしょう?

kunene

Re:スレッドローカル変数について

#3

投稿記事 by kunene » 16年前

返信遅れてすみません。

説明たらずだったようで、、、補足させてください。

スレッドA、スレッドB、スレッドCがあります。
スレッドCが複数起動します。

スレッドCのみで使用できるスレッドローカルの方法を探しています。
スレッドCの本体は、既に実装済みのソースから流用です。

__decspec(thread) にてスレッドローカルとして定義してしまうと
スレッドCのソースを変更する必要はないのですが、
スレッドA、スレッドBでも同じ変数が定義されてしまうので、無駄な領域ができてしまいます。

TLS関数を使うと、スレッドCのみで使用できるスレッドローカル変数を定義できそう(やってません)
なんですが、ソースを変更しなければならないと思ってます。

そこで、2つの長所のみの
既存のソース内部を変更せずに何とかその外側で特定のスレッドのみ定義される
スレッドローカル変数というものが定義できないかと思ってます。

たかぎさんのご意見ですと、既存のソースの変更が必要になると思いますが、
いかがでしょうか?

たかぎ

Re:スレッドローカル変数について

#4

投稿記事 by たかぎ » 16年前

ソースをまったく変更しないとなると、よほど幸運な状況(マクロ定義だけで済むとか)でない限り、コンパイラの変更か、それに近いことが必要になります。
対象となるコードを見せていただくとともに、どんな修正をしようとしているのかを具体的に補足してください。

閉鎖

“C言語何でも質問掲示板” へ戻る