問題タブ [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.
c - C でローカル データをスレッド化する
最近、スレッド ローカル ストレージを試しています。動作するコードがあり、すべて問題ないように見えますが、valgrind でプログラムを実行すると、いくつかの問題があるように見えます。
私の質問は、メモリを静的スレッド ローカル ストレージに割り当てた場合、スレッドの終了時に削除されますか?
これが私のコードです:
出力:
valgrind:
c - icc を使用した OpenMP およびスレッド ローカル ストレージ識別子
これは簡単なテスト コードです。
gccで問題なくこれをコンパイルしますが-fopenmp、icc (ICC) 12.0.2 20110112-openmp
test.c(7): エラー: OpenMP 並列プラグマ #pragma omp parallel default(none) を囲む変数リストに "a" を指定する必要があります
このタイプの変数にどのパラダイム (つまりshared、private、 ) が適用されるかはわかりません。threadprivateどちらを使用するのが正しいですか?
そのスレッド ローカル変数にアクセスする関数を呼び出すと、期待どおりの動作が得られますが、明示的な並列セクション内からアクセスするのに問題があります。
編集:
これまでの私の最善の解決策は、関数を介して変数へのポインタを返すことです
c++ - この thread_local の使用法がクラッシュするのはなぜですか?
問題を次の小さなコード スニペットに減らしました。
実行すると、プログラムがクラッシュします。なんで?
私は Windows で gcc バージョン 4.8.2 を使用していg++ -std=c++11 main.cppます。
c++ - スレッド固有のデータとスレッドのローカル ストレージ
Kerrisk のThe Linux Programming Interface: A Linux and UNIX System Programming Handbook、スレッドに関する第 31 章を読みました。この章には、スレッド固有のデータ (セクション 31.3.4) とスレッド ローカル ストレージ (セクション 31.4) が含まれます。トピックは 663 ~ 669 ページで説明されています。
スレッド固有のデータ ( pthread_key_create、pthread_setspecific、pthread_getspecific、およびその仲間) はより強力に見えますが、使用するのが少し面倒で、メモリ マネージャーをより頻繁に使用するようです。
スレッド ローカル ストレージ (__thread静的およびグローバル宣言で) は、コンパイル時間に制限があるため、少し強力ではないように見えますが、使いやすく、実行時にメモリ マネージャーから離れているように見えます。
変数pthread_key_createに遭遇したときに呼び出すコードが舞台裏にある可能性があるため、ランタイムメモリマネージャーについては間違っている可能性があります。__thread
Kerrisk は 2 つの戦略の比較/対比を提供しておらず、特定の状況でいつどちらを使用するかについても推奨していません。
質問にコンテキストを追加するには:サードパーティのライブラリを評価しています。ライブラリはグローバルを使用し、ロックを使用しません。マルチスレッド プログラムで使用したいと考えています。このプログラムは、スレッド化を使用してネットワーク遅延を最小限に抑えます。
ハンズダウンの勝者はいますか?または、どちらか一方を使用することを保証するさまざまなシナリオがありますか?
c# - タスク ファクトリとスレッド ローカル ストレージ
ループ内のタスク ファクトリから x 個のタスクを作成します。これらのタスクはオフになり、すべてのタスクが完了するのを待っている間にいくつかの作業を行います。
私が持っている質問は、各タスク/スレッドが DocumentObject などの高価なオブジェクトの独自のコピーを初期化することです。理想的には、このオブジェクトを各タスク/スレッドに再利用して、ファクトリの一部として再利用するときに再作成する必要がないようにしたいと考えています。
ThreadLocal.Netの概念でこのようなことが可能ですか。
java - clojure のスレッドローカル変数
- 他の理由はありませんが、1.1 で動作する、私が書いた他の多くのカスタム ライブラリがあります。
スレッドローカル変数を持つ簡単な方法が必要です。私が見たメソッドの多くは、このバージョンの clojure と互換性がありません。
この例に見られる
例 (スレッドローカル (atom 0)))
(def ^{:dynamic true}カウンター)
私にはうまくいかないようです
だから私は正しい方向に向けられる必要があります。
c# - ThreadLocal を使用してデータを渡す異なるクラス間で
ユーザーが私の質問が明確ではないことを指摘した後、「別のスレッド」に関する以下の詳細情報で私の質問を編集しました。
ThreadLocal<T>を使用して異なるクラス間でデータを渡すにはどうすればよいですか?
基本的に、Webservice のクラスからクラスに LogContext 情報を渡す必要がありTraceExtension:SoapExtensionます (TraceExtension は、この WebService が呼び出す別の WebService の要求/応答をログに記録するためのものです)。
この機能は、リクエストを開始したスレッドではなく別のスレッドで実行されるため、ServiceContext:IExtension <InstanceContext>
通常はそのような目的で使用する から取得できません。
この方法を使用して実際に実装していますThread.GetNamedDataSlot()が、パフォーマンス テストでメモリ リークの問題があることがわかりました。(はい、電話しましたがThread.FreeNamedDataSlot()、問題は解決しません)。これにより、MSはhttp://support.microsoft.com/kb/2540745にリークの問題が存在する可能性があると投稿しましたが、現在のリリースの時間枠では、すべての運用サーバーに修正を展開することはできません。推奨される回避策は、System.Threading.ThreadLocal クラスを使用することです。
これまでに見つけたすべてのリソース/例には、同じクラスに ThreadLocal のインスタンスと、Parallelism と PLinq のインスタンスがあります。あるクラスでデータを初期化/設定し、別のクラスから取得する例は非常に役立ちます。にデータを渡す他の方法TraceExtension : SoapExtensionも同様に役立ちます。
スケジュールが少しタイトなため、ご協力をお願いいたします。
詳細を編集してください:
リクエストが送信される Webservice のスレッドは、必要なレスポンスを返しながらバックグラウンド処理を実行する新しい Thread を作成します。新しいスレッドは、他のバックエンド Web サービスへの呼び出しを呼び出します。バックエンド Web サービスへの要求/応答をトレースするための TraceExtension クラスもあります。を使用して、元のスレッドから新しいスレッドのメソッドに LogContext 情報を渡しContextInfo : ISynchronizeInvokeます。
問題は、バックエンド Web サービス呼び出しを呼び出すクラスから LogContext オブジェクトを取得することです (これは新しい Thread で実行され、ServiceContext:IExtension<InstanceContext>LogContext を保持するクライアント要求が来た元の Thread では実行されません)。