問題タブ [interlocked]
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.
.net - (カスタム) パフォーマンス カウンターのスペースと時間の消費
(カスタム) パフォーマンス カウンターをインクリメントする速度に関しては、パフォーマンス カウンターはロックフリーのプロセッサ プリミティブであると理解しています。これは、数ダースの CPU サイクルのスペースで実行できることを意味していると思います。つまり、非常に高速であるため、ベンチマークすることは事実上不可能です。正しい?
カスタム パフォーマンス カウンターを作成する際のメモリ消費に関して、カウンターごとに約 128kb 以上 (グローバル共有メモリまたは個別の共有メモリから) が必要であると同僚から聞いたことがあります。あの数字は信じられない。それはほとんど意味がありません。おそらく2kから8kを信じることができますが、これについてより正確な情報を誰かが持っているかどうか知りたいですか?
c# - リストから値を累積する並列バージョンのコード>
並列計算に関するいくつかのことを理解するのに再び苦労しています。私が取り組んでいるコードには、拡張するクラスがありますlist<list<double>>
。このクラス内で、 の値の平均を返すメソッドを作成していlist<list<double>>
ます。このメソッドは非公開です。
この方法には 2 つのバージョンがあり、どちらも機能しています。最初のバージョンはシリアルです:
2 番目のバージョンは並列です。
学習課題として、より複雑な並列スレッドを使用して物事を混乱させようとしました。私のアイデアは、行を合計する中間配列なしでやり遂げることでした。具体的には、これは私の試みでした(動作しません):
このスニペットには (少なくとも) 2 つの誤りがあります。それが私に与える最初のエラーは次のsub += this[i][j];
とおりです:
'System.Collections.Generic.List>.this[int]' に最適なオーバーロードされたメソッドの一致には、いくつかの無効な引数があります
i と j の両方が int 型であるため、ここではこのエラーを理解できません。
次に、さらにエラーが発生しますInterlocked.CompareExchange(ref avg, tot+sub, tot);
(この方法がどのように機能するかを本当に理解していないため、予想されます):
名前 'sub' は現在のコンテキストに存在しません
誰かが最後のスニペットの正しい形式を教えてくれますか? および/またはこのことを明確にするための資料はありますか? http://msdn.microsoft.com/en-us/library/dd460703.aspxから読みましたが、物事を明確にするのに役立ちませんでした。
c# - Timer HandleElapsed ハンドラーの同期オブジェクトで Interlocked.CompareExchange 同期を使用する
MSDN の例を読んでいますhttp://msdn.microsoft.com/en-us/library/system.timers.timer.stop.aspx
timer.stop の例では、Interlocked.CompareExchange の使用方法が正しくないのではないかと疑っています。
私の質問はこのブロックです
それは好きですか?
元の代入 syncPoint = 0;
はスレッドセーフではないためです。私は正しいですか?
更新:
例を更新しました。ComareExchange の戻り値について質問はありません。私の質問は、この if ブロックの最後にある変数同期点の割り当てについてです。インターロックはまったくありません。
c# - インターロックはどのように機能し、ロックよりも速いのはなぜですか?
インターロックされたクラスについて学びましたが、単にロックするよりも高速であると考えられています。さて、これはすべて素晴らしいことですが、実装については興味があります。
私の知る限り、変数の操作がアトミックに行われるようにする唯一の方法は、常に 1 つのスレッドだけがその変数にアクセスできるようにすることです。これはロックしています。
リフレクターを使用して Interlocked のソースを取得しましたが、外部メソッドを使用してすべての作業を行っているようです:
私はいくつかのテストを実行しましたが、実際には Interlocked は、単にオブジェクトをロックしてインクリメントするよりも 2 倍高速です。
彼らはどのようにやっていますか?
c# - これはスレッドセーフですよね?
確認中…_count
安全にアクセスされていますよね?
どちらのメソッドも、複数のスレッドによってアクセスされます。