問題タブ [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++ スレッド ローカル ストレージ ベクトルのブースト
マルチスレッド用の tls ベクターを作成していますが、ベクター要素にアクセスする方法を知りたいです。
基本的に私はこれを作成しました:
これは構文の問題だと思いますが、作成した temp tls 文字列にベクトル要素を割り当てるにはどうすればよいでしょうか?
助言がありますか?ありがとう :)
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 では実行されません)。
c - pthread キーの独自の実装
私の既存のコードは、いくつかのスレッド固有のキーを利用しています。私は今、このようなキーをますます作成する必要があるこのコードをスケーリングするつもりです。しかし、pthread はプロセスごとに約 1024 個のキーをサポートします。これは、この制限を超えるとキーが作成されないため、問題が発生します。キーの pthread 実装を使用せずに、同じ機能をどのように実現できるかについての提案はありますか?
python - GILを取得せずにCythonで中間多次元配列を割り当てます
Cython を使用して、中間多次元配列の生成を伴う高価な操作を並列化しようとしています。
次の非常に単純化されたコードは、私がやろうとしていることの種類を示しています。
これがコンパイルに失敗する理由は少なくとも 2 つあります。
の出力に基づいて
cython -a
、型付きメモリ ビューを作成します。Python API 呼び出しが含まれているように思われるため、GIL を解放して外側のループを並行して実行することはできません。
型付きメモリ ビューは Python オブジェクトではないので、子プロセスは最初に GIL を取得しなくても作成できるはずだという印象を受けました。これは事実ですか?
2.prange(m, nogil=True)
通常の に置き換えても、Cythonは内部ループ内range(m)
に a が存在することを好まないようです。cdef
アップデート
2番目の問題は、移動することで簡単に解決されたことが判明しました
for
ループの外で、ただ代入する
ループ内。しかし、なぜこれが必要なのか、私はまだ完全には理解していません。
使用しようとするprange
と、次のコンパイルエラーが発生します。