問題タブ [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.
c# - Parallel.For の Interlocked.Add を削除しますか?
いくつかのルックアップを実行し、parallel.for を使用して発生をカウントするコードがいくつかあります。
このバージョンは、逐次計算よりもはるかに高速です。しかし、Interocked.Add がボトルネックであるため、発生をカウントする別の解決策を見つけたいと思います。Plinq がオプションになるかどうかを調査していましたが、配列内の nextPos1 要素の出現をカウントする方法を見つけることができませんでした。
c# - What is Interlocked.Increment actually doing?
Interlocked.Increment
seems like among the most standard/simple of operations one would need to perform in multithreaded code.
I assume that the functionality of the method is some sort pattern that anyone with threading experience would be able to replicate.
So basically what I am wondering is if someone could provide an exact duplicate (with explanation of how it works) of what the Interlocked.Increment
method is actually doing internally? (I have looked for the source of the actual method but been unable to find it)
c++ - InterlockedCompareExchangeを使用したロックレス
インターロックされた操作を使用して、次のコードの断片をロックレスにしようとしています。これを変換する方法はありますか?
私は次のようなことを考えていました
これに問題/人種はありますか?
c# - Interlocked.Exchange は 2 つの byte[] 配列を交換できますか?
ロックを必要とせずに、2 つのバイト配列をアトミックにスワップしたい。つまりやりたくない
これは Interlocked.Exchange で可能ですか? ドキュメントの int 配列で機能することがわかります。
ありがとう!
c# - 予期しないインターロック動作に遭遇しましたか?
Web リンク チェッカー プログラムを作成していて、Interlocked で説明できない動作に遭遇しました。まず、コードの要約版を次に示します。
デバッグ出力に表示されるのは、次のようなものです。
- LinkChecker: リンク 'http://serverfault.com' をチェックしました。残り: 1
- LinkChecker: リンク 'http://superuser.com' をチェックしました。残り: 0
- LinkChecker: リンク 'http://stackoverflow.com' をチェック、残り: -1
_remainingLinks
(一部のコード実行で)が負になる理由がわかりません。AllLinksChecked
これには、イベントの発生が早すぎるという副作用もあります。(ちなみに、上記のコードには、_remainingLinks
触れている場所のみが含まれています。)
私は何を間違っていますか?
c++ - 構造体のインターロック交換
WinAPIのInterlockedExchangeを使用して、スレッドのロックフリー同期を使用したいと思います。
現在、このようなクラスがあります。
1つのスレッドは新しい値を設定でき、もう1つのスレッドはこの値を読み取ることができます。
今私がしたいのは、LONG
値をに変更することstruct
です。struct
WinAPIにロックを解放する方法はありますか?
c++ - スレッド同期とキャッシュコヒーレンシの維持のためのインターロックの使用
データセットが特定のスレッドによって書き込まれているかどうかを判断するC++の変数でInterlockCompareExchange操作を使用するある種のアルゴリズムを使用する場合(独自の小さなロックを作成することによって)、インターロックされた操作を確実にするにはどうすればよいですか?値を更新したものは、データがi7のレベル2キャッシュなどに格納されている場合、他のスレッドによってすぐに認識されます。
マルチコアプロセッサのキャッシュ間でデータの一貫性を保つためにキャッシュコヒーレンシが使用されていることは知っていますが、あるコアがインターロック機能を使用して変数を更新し、キャッシュがコヒーレンシの問題をチェックして修正するときの短い時間枠についてはどうでしょうか独自のキャッシュにある変数をチェックしていますか?InterlockCompareExchange操作を行っている変数が揮発性であり、変更がメモリに直接書き込まれるようにした場合、この問題は修正されますか?メモリバリア(VSのMemoryBarrier())はキャッシュの一貫性を保証せず、不要な命令の並べ替えのみを保証すると信じるのは正しいですか?
私の質問が曖昧すぎないことを願っています。もしそうなら、コメントに答えようとします。特定の問題がないため、この質問で投稿するソースコードはありませんが、特にc ++ 0xにインターロックが含まれている場合に、問題が発生する可能性があるかどうかを後で参照できるようにしたいと思います。その標準ライブラリの。
ありがとうございました。
c++ - インターロックされた関数c++
共有メモリと連動機能を利用したシステムを開発しています。
私が持っていると仮定しましょうvolatile unsigned int n, a, b
。次の擬似コードをアトミックに実行したいと思います。
どうすればいいですか?複数のインターロック機能を一緒に使用できますか?
c# - Interlockedを使用して、長いテストと条件付き更新を行います
Interlocked
クラスを使用してこれを行うためのきちんとした方法はありますか?それとも私はただ使うべきlock { }
ですか?
私の特定のユースケースは、値を計算し、long
それを共有の「最大」値と比較して、ローカル値が大きい場合にのみ共有値を置き換える複数のスレッドがあることです。
c# - クラスで Interlocked.CompareExchange を使用する
System.Threading.Interlocked.CompareExchange
operator は、Compare-And-Swap 操作のアトミック (スレッドセーフ) C# 実装を提供します。
たとえば、int i = 5; Interlocked.CompareExchange(ref i, 10, 5);
このコマンドの後、int i は値 = 10 になります。また、比較と交換はアトミックに行われます (単一操作)。
これをクラスインスタンスで使用しようとすると、比較が失敗し、値が交換されません。
今私がするとき
比較および交換操作は失敗します。そこで、クラス X の Equals と == 演算子を次のようにオーバーライドしました。
だから、今は として取得Interlocked.Equals(a,b)
しますtrue
が、CompareExchange
操作はまだ失敗します。
これを行う方法はありますか?2 つのクラス インスタンスを比較し、それらの 1 つに比較に基づいて値を割り当てたいと考えています。