0

値型の配列のMemberwiseCloneを実行する場合:

 var arr = new double[100];

これらのdoubleが他のスレッドでインターロックされた書き込みを使用して変更されている場合、MemberwiseClonedコピーは、その中でdoubleが破損するリスクがありますか?私はわずかに古い値を持っていることを心配していません、ただ引き裂き、インターロックされたメンバーワイズクローン間の相互作用(これはメモリブリットタイプの操作に変換されると思いますか?)

4

1 に答える 1

1

はい。32ビットオペレーティングシステムでは、これが破損するリスクがあることさえ保証されています。64ビットでは実装定義です。それが起こらないことをテストしたとしても、あなたのテストはあなたの特定の.NETバージョンとあなたの特定のハードウェアでのみ行われたので、私はそれを軽く危険にさらすことはしません。あなたは本当に確認することはできません。

64ビットでは、独自のバージョンのクローンを実装することで、ティアリングを確実に防ぐことができます(これはそれほど遅くない可能性があります)。

于 2012-06-12T14:42:25.983 に答える