問題タブ [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++ - InterlockedExchange と InterlockedExchangePointer の比較
InterlockedExchange
とはどう違いInterlockedExchangePointer
ますか?
は
と
同等?
関数を知らないVC6にコードを移植する必要がありInterlocked[...]Pointer
ます。
編集:
私自身の経験から、VC6 は非常にバグが多く、もう誰も使用しないことを知っています。
ただし、私は意思決定者ではないため、元の質問に対する回答をいただければ幸いです。
c# - マルチスレッド環境で、monitor.waitおよびmonitor.pulseとともにInterlocked.Decrementを使用した場合の誤った動作
スレッドプールを使用して同時タスクを実行するマルチスレッドライブラリを実装しようとしています。基本的に、受信した収集パラメーターからスレッドプールにタスクを追加し、処理中の最後のタスクがパルス信号を送信するまで待機します。以前のテストでは成功しましたが、処理が非常に短いタスクでテストしたいときに、奇妙な問題が発生しました。どういうわけか、メインスレッドで待機コマンドが実行される前にパルス信号が送信されるか、同期の努力にもかかわらず単純に見ることができない何かが起こっています。
問題を解決するために、現在はうまく機能している潜在的なパフォーマンス上の利点のために、別の「あまり望ましくない」ソリューションを実装しましたが、このような場合に最初のアプローチが機能しない理由を知りたいと思いました。そもそも、パフォーマンスに関しては、この2つの間に大きな違いはありません。
説明のために、以下のプロセスを簡略化した後、両方のソリューションを追加しています。誰かが私に何が悪いのかを指摘するのを手伝ってもらえますか?
前もって感謝します。
algorithm - Diffe Hellman and the Rivest Shamir interlock protocol?
So Diffe Hellman is subject to a MITM attack where two parties exchange:
X = g^x mod n and Y = g^y mod n.
Now presumably this can be protected against by using the Rivest Shamir interlock protocol where we split a message into two pieces and exchange them bit by bit. What i want to know is how we can split g^x mod n into two pieces for usage with Rivest Shamir?
multithreading - interlocked.CompareExchangeを使用してInterlocked.AddをInterlocked.add(ref float、ref float)として拡張します。
'Interlocked.Add(ref int32、int32)またはInterlocked.Add(ref int64、int64)'のように追加を呼び出すことができます
私はそれを次のように呼びました:InterlockedEx.Add(ref subtotalVolume [i]、v.Volume);
アドバイスを与えることができる人は、とにかくそれを正しく実行させます。
関数の結果は通常の関数と等しくありません(TPLを使用しないでください)。
c++ - vs2010 で InterlockedAdd が利用できないのはなぜですか?
私はwindows.hをインクルードしており、vs2010でInterlockedAddを使用したいのですが、「識別子が見つかりません」というエラーをコンパイルしますが、InterlockedIncrement
うまく機能します。私は使用しようとします:
そしてコンパイルエラー:
警告 C4163: '_InterlockedAdd': 組み込み関数として使用できません
1>test10.cpp(107): エラー C3861: 'InterlockedAdd': 識別子が見つかりません
コードの何が問題になっていますか?
c# - SpinLock の方が速いと誰もが言うのはなぜですか?
私はインターネット上で多くのドキュメントや記事、投稿を読みました。ほとんどすべての人が、短い実行コードでは SpinLock の方が高速であると主張していますが、私がテストを行ったところ、単純な Monitor.Enter は SpinLock.Enter よりも高速に動作するように見えます (テストは .NET 4.5 に対してコンパイルされています)。
2.5 GHz の 24 コアを搭載したサーバーで、このアプリケーションを x64 でコンパイルすると、次の結果が得られました。
css - divをインターロックする方法は?
これから(Pinterestのように)未定義の数のdivをインターロックしたいと思います:
これに:
CSSやその他のもので可能ですか?
c# - インターロックされた変数から最新の値を読み取り、変数への書き込みは 1 回だけです
2 つのメソッドを持つクラスを作成したいと思います。
void SetValue(T value)
値を保存しますが、単一の値のみを保存できます (それ以外の場合は例外がスローされます)。T GetValue()
値を取得します (まだ値がない場合は例外をスローします)。
私には次の欲求/制約があります。
- 値の読み取りは安価なはずです。
- 値の書き込みは (適度に) コストがかかる場合があります。
GetValue()
最新の値が存在しない場合にのみ例外をスローする必要があります ( ):別のスレッドでを呼び出した後、null
古い値に基づいて例外をスローするべきではありません。null
SetValue()
- 値は一度だけ書き込まれます。これは
GetValue()
、値が null でない場合、値を更新する必要がないことを意味します。 - 完全なメモリ バリアを回避できる場合は、(はるかに) 優れています。
- ロックフリーの並行性の方が優れていることはわかりますが、ここでそうであるかどうかはわかりません。
私はそれを達成するためのいくつかの方法を思いつきましたが、どれが正しいのか、どれが効率的なのか、なぜそれらが (不) 正しくて (非) 効率的なのか、そして私が望むものを達成するためのより良い方法があるかどうかはわかりません.
方法 1
- 不揮発性フィールドの使用
Interlocked.CompareExchange
フィールドへの書き込みに使用するInterlocked.CompareExchange
フィールドから読み取るために使用するInterlocked.CompareExchange(ref v, null, null)
これは、フィールドに対して を実行した後、次のアクセスで、少なくとも見た値と同じくらい新しい値が取得されるという (おそらく間違った) 仮定に依存していInterlocked.CompareExchange
ます。
コード:
方法 2
volatile
フィールドの使用- Ìnterlocked.CompareExchange
to write the value (with [Joe Duffy](http://www.bluebytesoftware.com/blog/PermaLink,guid,c36d1633-50ab-4462-993e-f1902f8938cc.aspx)'s
#pragmato avoid the compiler warning on passing a volatile value by
ref`) を使用します。 - フィールドが
volatile
コード:
方法 3
- 不揮発性フィールドの使用。
- 書き込み時にロックを使用します。
- null を読み取る場合は、読み取り時にロックを使用します (参照はアトミックに読み取られるため、ロックの外で一貫した値を取得します)。
コード:
方法 4
- volatile フィールドの使用
- ロックを使用して値を書き込みます。
- フィールドは揮発性であるため、値を直接読み取ります (参照はアトミックに読み取られるため、ロックを使用しなくても一貫した値を取得できます)。
コード:
その他の方法
Thread.VolatileRead()
また、任意の書き込み手法と組み合わせて、値を読み取るために使用することもできます。
c# - Interlocked は Finalizer で使用できますか?
ファイナライザーでいくつかの管理対象リソースをクリーンアップする必要があるとします。または、少なくともクリーンアップが必要なスレッドセーフな方法でどこかに記録する必要があるとします。私が理解していることから、ファイナライザーでロックを取得することは厳密に禁じられていますが、Interlocked クラスはどうですか? これは安全で、デッドロックは発生しませんか?
また、すべてのファイナライザーが 1 つのスレッドで実行されているようですが、これは保証された動作ですか、それとも単なる実装の詳細ですか? そして、それが単なる詳細である場合、ロックが他のどこにも取得されないという条件で、ファイナライザー内でロックを取得しても (たとえば、ロックのないキューにジョブをプッシュするために)、これは問題ありませんか?