問題タブ [thread-local-storage]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
5 に答える
6805 参照

multithreading - ローカル変数の代わりにスレッド ローカル ストレージ (TlsAlloc、TlsGetValue、ets) を使用する理由

私の質問は、スレッド関数でローカル変数だけでなく、TLS メカニズムを使用する理由です。良い例をいくつか教えてください。または、ローカル変数に対する TLS の利点は何ですか? ありがとう、マテウス

0 投票する
1 に答える
2620 参照

c# - スレッドのローカル ストレージのメモリ使用量

.NET で、スレッド ローカル ストレージが使用しているメモリの量を判断する方法はありますか?

具体的には、ThreadStatic オブジェクトによって使用されるメモリの量と、Thread データ スロット内のオブジェクトに割り当てられたメモリ (たとえば、Thread.SetData を呼び出すことによって) によって使用されるメモリの量を見つけようとしています。

明確にするために:

スレッド ローカル ストレージ: http://msdn.microsoft.com/en-us/library/6sby1byh.aspx

スレッド ローカル ストレージ: スレッド相対静的フィールドとデータ スロット http://msdn.microsoft.com/en-us/library/6sby1byh.aspx

0 投票する
1 に答える
6074 参照

c++ - スレッド-ローカルストレージとiOS

私の理解では、iOSはをサポートしていません__thread。明らかに、を使用してこれを行う方法がありますpthread_setspecific。ただし、この機能を実装したテンプレートクラスはすでにありますか?

特に、書くのが簡単なコードではないので、車輪の再発明をしたいと思います。

リンクをいただければ幸いです。

乾杯

0 投票する
1 に答える
598 参照

java - ThreadLocalJDKのドキュメント

JDK 1.6のドキュメントには、の使用方法に関する例が示されていますLocalThread<T>。ここにコピーして貼り付けます:

たとえば、以下のクラスは、各スレッドにローカルな一意の識別子を生成します。スレッドのIDは、最初に呼び出されたときに割り当てられ、UniqueThreadIdGenerator.getCurrentThreadId()その後の呼び出しでは変更されません。

私の問題は:

複数のスレッドが呼び出すUniqueThreadIdGenerator.getCurrentThreadId()場合、初期化がないため、0のみが返されます。このようにすべきではありません:

最初の呼び出しの後、変数を初期化します。

0 投票する
3 に答える
3306 参照

.net - TPL の使用時にスレッド ローカル ストレージ (TLS) を管理するにはどうすればよいですか?

ロギング コンテキスト情報を TLS に保存して、エントリ ポイントで値を設定し、その値を結果のすべてのスタックで使用できるようにしたいと考えています。これはうまくいきますが、TPL と ThreadPool も使用しています。問題は、TLS データを他のスレッドに移行する方法です。私はすべて自分で行うことができますが、Parallel.For のような便利なメソッドが失われます。

TPL を使用するときに TLS をコピーする方法はありますか? これは、await 機能を取得するときに C# にも適用されます。

ありがとう、エリック

0 投票する
2 に答える
1683 参照

python - Python プログラムで ctypes を介してスレッド ローカル ストレージで共有ライブラリを使用するとメモリ リークが発生する

Python でモジュールを使用して、ctypesスレッド ローカル ストレージを含む共有 c-library をロードしています。これは長い歴史を持つ非常に大きな c-library であり、スレッドセーフにしようとしています。ライブラリには多くのグローバル変数と静的変数が含まれているため、スレッド セーフに対する最初の戦略は、スレッド ローカル ストレージを使用することでした。ライブラリをプラットフォームに依存しないようにしたいと考えており、win32、win64、および 64 ビット Ubuntu の両方でスレッド セーフをコンパイルおよびテストしています。純粋な c プロセスからは、問題はないようです。

ただし、win32 および Ubuntu の Python (2.6 および 2.7) では、メモリ リークが発生しています。Python スレッドが終了したときに、スレッド ローカル ストレージが適切に解放されていないようです。または、少なくとも、メモリが解放されたことをpythonプロセスが「認識」していないということです。同じ問題は、実際には win32 の ac#-program でも見られますが、win64 サーバー テスト マシン (python 2.7 も実行) には存在しません。

この問題は、次のような単純なおもちゃの例で再現できます。

以下を含む c ファイルを作成します (linux/unix削除__declspec(dllexport)時):

MINGW次のように、Linux の Windows/gcc でウィットをコンパイルします。

gcc -o leaky.dll(またはleaky.so)-shared the_file.c

Windows では、Visual Studio でコンパイルして__thread__declspec(thread). ただし、win32 (winXP までだと思います) では、ライブラリを実行時に .xml でロードする場合、これは機能しませんLoadLibrary

次のような python プログラムを作成します。

エラーを再現するにはこれで十分です。ガベージ コレクターを明示的にインポートしcollect gc.collect()ます。新しいスレッドを開始するたびに a を実行しても効果はありません。

しばらくの間、この問題は互換性のないランタイム (Visual Studio でコンパイルされた Python、私のライブラリではMINGW) に関係していると考えていました。しかし、問題はUbuntuにもありますが、ライブラリがMINGW.

誰でも助けてくれることを願っています!

乾杯、Simon Kokkendorff、National Survey and Cadastre of Denmark。

0 投票する
3 に答える
443 参照

visual-c++ - __addgs *はどのように使用され、GSとは何ですか?

Microsoftのサイト

組み込み関数。それはであると述べられていoffsetます

GSの先頭からのオフセットGSはプロセッサレジスタを参照していると思います。

GSは、スタックとどのように関連していますか?または、 GSに関するオフセットを計算するにはどうすればよいですか?

(そして、これや特定の呼び出し規約に関連する「落とし穴」はあります__fastcallか?)

0 投票する
2 に答える
4652 参照

c++ - thread_localのコスト

C ++がthread_local言語機能としてストレージを追加しているので、いくつか疑問に思っています。

  1. thead_localありそうな 費用はいくらですか?
    • メモリ内ですか?
    • 読み取りおよび書き込み操作の場合?
  2. これに関連して:オペレーティングシステムは通常どのようにこれを実装しますか?宣言されたものはthread_localすべて、作成されたスレッドごとにスレッド固有のストレージスペースを指定する必要があるように思われます。
0 投票する
1 に答える
1135 参照

c# - 既知のシードを使用してThreadLocalランダムジェネレーターを作成する

スレッドごとに単一の乱数ジェネレーターを作成する方法を見つけるのに苦労していますが、同時に、プログラムを再実行したときに同じ番号が生成されるようにしています。

私が今していることは次のようなものです:

'data'リストを作成するrandomgeneratorにはシードが提供され、計算に使用されるrandomgeneratorには処理中の数値のハッシュコードに基づいたシードが提供されるため、結果は再現可能です。スレッドの数とインスタンス化される順序に関係なく。

スレッドごとに1つのrandomgeneratorだけをインスタンス化できるかどうか疑問に思っています。次のコードはそれを実現しているようですが、ランダムジェネレーターには(再現可能な)シードが提供されていないため、結果を再現することはできません。

誰かがこの問題の良い解決策を考えることができますか?

0 投票する
3 に答える
21298 参照

linux - アセンブリの%gsとは

gccでコンパイルした後、この関数は次のアセンブリコードに変換されます。

私は2行を理解していません:

%gsとは何ですか、そしてこれらの2行は正確に何をしますか?

これはコンパイルコマンドです: