11

decimal複数のスレッドから同時にアクセスされる変数があります。Interlockedクラス関数は小数をまったくサポートしていないため、私が残した唯一のアプローチはlock(){}. それはやり過ぎのようです。

decimalスレッドセーフな方法で変数に値を追加する他の方法はありますか?

4

5 に答える 5

18

ロックの使用はやり過ぎではありません。必須です。

System.Decimal のような構造型はアトミックではなく、ネイティブの CPU ワード サイズにも適合しません。これが、Interlocked にも過負荷がない理由です。

于 2013-10-22T12:06:29.533 に答える
4

いいえ。 の内部表現はdecimal複雑すぎて、CPU レベルでアトミック命令を使用して変更を行うことはできInterlockedません (これはほとんどの場合に実行されることであり、関心のあることです)。

CPU がある程度の量をアトミックに処理できない場合、手動ロックが唯一のオプションです。同期プリミティブ (例:lockミューテックスに対して) を選択できますが、それだけです。

于 2013-10-22T12:08:32.343 に答える