ほとんどの場合、64 ビット システムでの double 型と decimal 型の更新はアトミック操作であるため、これらの型は 64 ビットです。
いいえ、decimal
最初は 128 ビットです。また、64 ビットコンピューターで実行しているからといって、必ずしも 64 ビット CLR を実行しているとは限りません。ここでの「システム」の意味が明確ではありません。
したがって、 のアトミック性を想定することさえすべきではありませんdecimal
。double
64 ビットの CLR でも、アラインメントに依存することもあって、 の原子性に依存したくありません。C# 仕様では、次のように明示的に述べられています (C# 4 仕様のセクション 5.5)。
long、ulong、double、decimal などの他の型、およびユーザー定義型の読み取りと書き込みは、アトミックであるとは限りません。
そのため、nullable側は無意味になりますが...
しかし、二重に更新すると?そして小数?64ビットシステムで入力すると、アトミックになりますか? ダブルのサイズは?そして小数?
Nullable<T>
基本的にT
フィールドとbool
フィールドです。したがって、ストレージは の場合は 64 ビットdouble
以上、 の場合は 128 ビット以上になりますdecimal
。正確なストレージはコンテキストに依存する可能性が非常に高いですが、基本的に、これらの型の操作にアトミック性は期待できません。
他の人が言ったように、保証されていないものに依存したくないことはほぼ確実です。個人的には、ほとんどの場合、一般的にロックフリー コーディングは避けようとします。CLR/BCL チームによって提供され、安全であることが証明されている高レベルの抽象化を使用するようにしてください。