独自のスワップメソッドを実装する必要はありませんか? Interlocked.ExchangeはMicrosoftからの目的のSwapメソッドですか?Interlocked.Exchange <T> Microsoftの意図したスワップ方式ですか?
答えて
ない理由はない、それは完全に一般的な目的ではないのですが。
アトミックであることが保証されます- 、すなわち、スレッドセーフ。あなたはおそらくこれをほとんど必要としません。
- Interlocked.Exchangeは参照型でのみ機能します。int、long、IntPtr、float、doubleのさまざまなオーバーロードがあります。
私はあなた自身のスワップ方法にこれを好むでしょう。
Interlocked.Exchangeは、原子的に交換を処理する方法を提供します。基本的にInterlockedExchangedPointerの管理対象ラッパーです。
これは、少なくともスレッド化された状況では、独自のスワップ方式に比べて多くの利点があります。これは単一のアトミック操作であるため、スレッド化されたアプリケーションではるかに安全です。
単純なスワップ操作には使用しないでください。メモリへのアクセスをシリアル化し、おそらくCPUキャッシュを無効にしてCPUを停止させるためです。並行性を管理する必要がある場合は、.NETでのスワップよりも優れた方法があります。
ありがとう、あなたはもっと良い方法を知っていますか? –
私はMonitorクラスを知っています。シンプルスワップについて...一時的な使用に何が問題なのですか? :P – artificialidiot
スワップ(B) - > T =、= B、B = T:3つのトランザクション連動スワップ(B)を用い
分割することができる - > interlockedExchange(interlockedExhcangeを( b、a)); 分割可能な2つの操作であるため、問題は解決されません。
インターロックされたスワップを取得する最善の方法は、ステップが分割されないようにするために重要なセクションを置くことです。これで、別の方法を探し
、Tはペア<た場合、B>、あなたが交換された値を持つ新しいペアを構築した後、TのinterlockedExchangeを使用することができます - しかしに交換するペアを構築するための行動他の誰かがスワップしている場合はデータの折れ曲がりが発生したり、交換をしようとすると既にスワップされている可能性があります。したがって、ステップが分割されないように、重要なセクションが必要です。
私は何かを見逃しましたか? AFAICT @ Joanは並行性やアトミック性の必要性について何も言わなかった。それは "意図されたスワップ方法"に暗黙のうちですか? – LarsH
それは私がそれを読む方法 - 連動関数は、これをすべて一度に行うことを暗示しています。そうでなければ、インターロックド・エクスチェンジとスワップの間の質問の関係は、既に交換されているので実際のスワップを実行していないとは確信していません。 –
Interlocked.Exchangeは引数を入れ替えません。最初の引数だけが変更され、2番目の引数は変更されません。 「交換」とは、最初の引数の新しい値を古い値と交換することを指します。
これは、スワップ機能にとって非常に貧弱な選択です。
- 1. ガルプは、コマンドプロンプトで意図したCSSとHTML形式のフォルダ
- 2. インテリセンス<%=意図<%@総会=は
- 3. Androidの意図: - 使用意図がからクラスオブジェクトを渡すために活動
- 4. カメラの意図 - 方法?
- 5. sscanf評価式の「[^ <]」は何を意味しますか?
- 6. メイクファイルの意図したターゲットシステムの把握
- 7. Kerberos TGTの動作
- 8. C#MVC - 意図した改行でSQLからレコードを表示する方法
- 9. C#からの呼び出しを意図したC++の記述ですか?
- 10. 意図
- 11. 意図
- 12. 意図
- 13. 通知からの意図
- 14. アンドロイドエラーの意図
- 15. Interlocked.Read/Interlocked.Exchangeは.NETよりMonoの方がずっと遅いですか?
- 16. 意図なしのメール
- 17. <<はルビの意味ですか?
- 18. Microsoft Graph。 DriveItem Id形式ですか?
- 19. ヌル意図)Androidのドキュメントで
- 20. フォールバックの意図(Googleでアクション)
- 21. これは右図のための方程式である場合、ブール式は
- 22. 意図した方法では作成できないオブジェクトの処理C++
- 23. JSON Stringでの意図しないエスケープ
- 24. このbash whileループのブール式では、-ltの意味は何ですか?
- 25. Microsoft Wordの方程式を画像として保存するマクロですか?
- 26. カメラの意図を扱う方法android
- 27. C++の意図リストを作る方法
- 28. <a> href署名テンプレートページのフォームフィールドからの情報が意図したとおりに機能しない
- 29. 活動のためのアニメーション(意図)
- 30. トレーニング負の意図
2つの構造体を変更したい場合はどうすればよいですか? –
2つの構造体をアトミックにスワップする場合は、lock(...)で囲まれた通常のスワップルーチン(Interlocked.Exchangeではなく)を使用します。 –
スワップ(a、b) - > t = a、a = b、b = t:3トランザクション。インターロックスワップ(a、b) - >インターロックエクスチェンジ(a、インターロックエクステンション(b、a))を使用します。まだ分割できる2つの操作であるため、問題は解決されません。 –