decimal
複数のスレッドから同時にアクセスされる変数があります。Interlocked
クラス関数は小数をまったくサポートしていないため、私が残した唯一のアプローチはlock(){}
. それはやり過ぎのようです。
decimal
スレッドセーフな方法で変数に値を追加する他の方法はありますか?
decimal
複数のスレッドから同時にアクセスされる変数があります。Interlocked
クラス関数は小数をまったくサポートしていないため、私が残した唯一のアプローチはlock(){}
. それはやり過ぎのようです。
decimal
スレッドセーフな方法で変数に値を追加する他の方法はありますか?
ロックの使用はやり過ぎではありません。必須です。
System.Decimal のような構造型はアトミックではなく、ネイティブの CPU ワード サイズにも適合しません。これが、Interlocked にも過負荷がない理由です。
いいえ。 の内部表現はdecimal
複雑すぎて、CPU レベルでアトミック命令を使用して変更を行うことはできInterlocked
ません (これはほとんどの場合に実行されることであり、関心のあることです)。
CPU がある程度の量をアトミックに処理できない場合、手動ロックが唯一のオプションです。同期プリミティブ (例:lock
ミューテックスに対して) を選択できますが、それだけです。