問題タブ [thread-static]
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# - ThreadStatic オブジェクトの確定的な破棄
ThreadStatic 属性は、静的変数をスレッドごとに一意として宣言します。そのような変数を正しく処分する簡単なパターンを知っていますか?
ThreadStatic の前に使用したのは ThreadContextManager です。すべてのスレッドには、すべてのスレッド固有の情報を保持する ThreadContext が割り当てられました。いくつかのスレッドを生成し、それらを機能させました。次に、それらがすべて終了したら、ThreadContentManager を破棄しました。これにより、IDisposable の場合はすべてのコンテキストが破棄されました。
このパターンを ThreadStatic オブジェクトにすぐに変換する方法がわかりません。スレッドが死ぬため、オブジェクトは最終的に破棄され、スレッドを参照するものは何もありません。ただし、可能な限り決定論的な破棄を優先します。
アップデート
私は実際にスレッドを直接制御するわけではありません。タスクを実行する ThreadPool を持つ Microsoft CCR を使用しています。すべてのタスクが完了したら、Dispatcher (スレッドプールを保持する) を破棄します。問題は、「スレッドのメイン関数の最後に」何もする機会がないため、スレッドの実行の最後に手動で処理を行うことができないということです。どうにかして、スレッドの外部からスレッドの静的オブジェクトにアクセスできますか?
c# - フリーサイズのコンテキストベースのストレージを求める
まず、コンテキストベースのストレージがフレームワーク全体で一貫していることを望みます!
そうは言っても、ASP.NET、WCF、およびその他のマルチスレッド .NET コード全体でこれらのプロパティを安全にするための洗練されたソリューションを探しています。プロパティは、いくつかの低レベルのトレース ヘルパーにあります (なぜ内部にあるのか疑問に思っている場合、これらはメソッドを介して公開されます)。
不要なアセンブリ (System.Web など) に依存したくない。このコードを使用して何かを構成する必要はありません。私はそれを機能させたいだけです;)それは注文が高すぎるかもしれません...
何か裏技を持っている人はいますか?(Springの実装を見てきました)
アップデート
安全とは、同期を意味するものではありません。問題の背景はこちら
.net - ThreadPoolを介して循環させた場合、ThreadStatic変数の値は引き続き存在しますか?
ThreadStatic変数を使用して一部のデータを格納していますが、スレッドに格納したデータが終了してThreadPoolにリリースされた後も、そこに残っているのではないかと心配しています。スレッドを終了する前に、ThreadStatic変数をクリアすることを心配する必要がありますか?または、次のQueueUserWorkItemに「渡す」前に、ThreadPoolがこれを実行しますか?これは私にとって特に重要です。なぜなら、私のアプリの他のスレッドがThreadStatic変数の観点から機能するためのクリーンな状態になっていることを確認する必要があるからです。ありがとう!
c# - 静的 C# で変更された ThreadStatic
C# でスレッド静的オブジェクトを使用するコードがいくつかあります。
この場合、静的修飾子をスレッドの静的コンテキストに配置すると、どのような変更が得られるのか疑問に思っていました。
最初のものでは、インスタンスごとにスレッドごとに 1 つのコンテキストのコピーがあり、他のものではスレッドごとに 1 つのコピーしかありませんか?
multithreading - これは [ThreadStatic] を初期化するスレッドセーフな方法ですか?
前のコードはスレッドセーフですか? それとも、メソッドをロックする必要がありますか?
java - Java の ThreadLocal は内部でどのように実装されていますか?
ThreadLocal はどのように実装されていますか? それはJavaで実装されていますか(ThreadIDからオブジェクトへの同時マップを使用していますか)、それともJVMフックを使用してより効率的に実行していますか?
.net - ThreadStatic 属性で並列拡張機能を使用します。それはメモリをリークする可能性がありますか?
私は Parallel Extensions をかなり頻繁に使用していますが、ワーカー スレッドによるオブジェクトの再利用を可能にするために、スレッド ローカル ストレージを使用することが適切なケースに遭遇しました。そのため、スレッドごとに一意の値を持つ静的フィールド/変数をマークする ThreadStatic 属性を見ていました。
PE によるスレッドの再利用を保証せずに、ThreadStatic 属性を指定して PE を使用するのは賢明ではないように思えます。つまり、スレッドがある程度作成および破棄された場合、変数 (およびそれらが指すオブジェクト) は不確定な時間スレッドローカルストレージに残り、メモリリークが発生しますか? それとも、スレッドストレージはスレッドに関連付けられており、スレッドが破棄されるときに破棄されますか? しかし、プール内に、スレッドが使用されるコードのさまざまな部分からスレッド ローカル ストレージを蓄積する、長く存続しているスレッドが潜在的に存在する可能性があります。
PE でスレッド ローカル ストレージを取得するためのより良い方法はありますか?
ありがとうございました。
c# - 次のコード C# で NullReferenceException が発生するのはなぜですか?
変数を使用する次のテスト プログラムがあります。ThreadStatic
このコードを試すと、NullReferenceException
.
誰でも説明できますか?