問題タブ [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.

0 投票する
3 に答える
1087 参照

c# - Parallel.For の Interlocked.Add を削除しますか?

いくつかのルックアップを実行し、parallel.for を使用して発生をカウントするコードがいくつかあります。

このバージョンは、逐次計算よりもはるかに高速です。しかし、Interocked.Add がボトルネックであるため、発生をカウントする別の解決策を見つけたいと思います。Plinq がオプションになるかどうかを調査していましたが、配列内の nextPos1 要素の出現をカウントする方法を見つけることができませんでした。

0 投票する
3 に答える
6738 参照

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)

0 投票する
2 に答える
9914 参照

c++ - InterlockedCompareExchangeを使用したロックレス

インターロックされた操作を使用して、次のコードの断片をロックレスにしようとしています。これを変換する方法はありますか?

私は次のようなことを考えていました

これに問題/人種はありますか?

0 投票する
3 に答える
1308 参照

c# - Interlocked.Exchange は 2 つの byte[] 配列を交換できますか?

ロックを必要とせずに、2 つのバイト配列をアトミックにスワップしたい。つまりやりたくない

これは Interlocked.Exchange で可能ですか? ドキュメントの int 配列で機能することがわかります。

ありがとう!

0 投票する
2 に答える
108 参照

c# - 予期しないインターロック動作に遭遇しましたか?

Web リンク チェッカー プログラムを作成していて、Interlocked で説明できない動作に遭遇しました。まず、コードの要約版を次に示します。

デバッグ出力に表示されるのは、次のようなものです。

  • LinkChecker: リンク 'http://serverfault.com' をチェックしました。残り: 1
  • LinkChecker: リンク 'http://superuser.com' をチェックしました。残り: 0
  • LinkChecker: リンク 'http://stackoverflow.com' をチェック、残り: -1

_remainingLinks(一部のコード実行で)が負になる理由がわかりません。AllLinksCheckedこれには、イベントの発生が早すぎるという副作用もあります。(ちなみに、上記のコードには、_remainingLinks触れている場所のみが含まれています。)

私は何を間違っていますか?

0 投票する
4 に答える
2829 参照

c++ - 構造体のインターロック交換

WinAPIのInterlockedExchangeを使用して、スレッドのロックフリー同期を使用したいと思います。
現在、このようなクラスがあります。

1つのスレッドは新しい値を設定でき、もう1つのスレッドはこの値を読み取ることができます。
今私がしたいのは、LONG値をに変更することstructです。structWinAPIにロックを解放する方法はありますか?

0 投票する
1 に答える
1628 参照

c++ - スレッド同期とキャッシュコヒーレンシの維持のためのインターロックの使用

データセットが特定のスレッドによって書き込まれているかどうかを判断するC++の変数でInterlockCompareExchange操作を使用するある種のアルゴリズムを使用する場合(独自の小さなロックを作成することによって)、インターロックされた操作を確実にするにはどうすればよいですか?値を更新したものは、データがi7のレベル2キャッシュなどに格納されている場合、他のスレッドによってすぐに認識されます。

マルチコアプロセッサのキャッシュ間でデータの一貫性を保つためにキャッシュコヒーレンシが使用されていることは知っていますが、あるコアがインターロック機能を使用して変数を更新し、キャッシュがコヒーレンシの問題をチェックして修正するときの短い時間枠についてはどうでしょうか独自のキャッシュにある変数をチェックしていますか?InterlockCompareExchange操作を行っている変数が揮発性であり、変更がメモリに直接書き込まれるようにした場合、この問題は修正されますか?メモリバリア(VSのMemoryBarrier())はキャッシュの一貫性を保証せず、不要な命令の並べ替えのみを保証すると信じるのは正しいですか?

私の質問が曖昧すぎないことを願っています。もしそうなら、コメントに答えようとします。特定の問題がないため、この質問で投稿するソースコードはありませんが、特にc ++ 0xにインターロックが含まれている場合に、問題が発生する可能性があるかどうかを後で参照できるようにしたいと思います。その標準ライブラリの。

ありがとうございました。

0 投票する
2 に答える
1899 参照

c++ - インターロックされた関数c++

共有メモリと連動機能を利用したシステムを開発しています。

私が持っていると仮定しましょうvolatile unsigned int n, a, b。次の擬似コードをアトミ​​ックに実行したいと思います。

どうすればいいですか?複数のインターロック機能を一緒に使用できますか?

0 投票する
2 に答える
1277 参照

c# - Interlockedを使用して、長いテストと条件付き更新を行います

Interlockedクラスを使用してこれを行うためのきちんとした方法はありますか?それとも私はただ使うべきlock { }ですか?

私の特定のユースケースは、値を計算し、longそれを共有の「最大」値と比較して、ローカル値が大きい場合にのみ共有値を置き換える複数のスレッドがあることです。

0 投票する
3 に答える
15304 参照

c# - クラスで Interlocked.CompareExchange を使用する

System.Threading.Interlocked.CompareExchangeoperator は、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 つに比較に基づいて値を割り当てたいと考えています。