int? はスレッドセーフですか? 質問する

int? はスレッドセーフですか? 質問する

.Net では、すべての 32 ビット型 (、intなどbool) がスレッドセーフであることはわかっています。つまり、部分的な書き込みは発生しません (仕様による)。

しかし、同じことがint?(nullable int) にも当てはまりますか?

ベストアンサー1

質問の表現が不十分で、これまでの回答に混乱が生じています。質問は「int型の変数への読み取りと書き込みは保証されていますか?」であるべきです。原子???

いいえ、絶対にそうではありません。この点については仕様が非常に明確です。

次のデータ型の読み取りと書き込みはアトミックです: bool、char、byte、sbyte、short、ushort、uint、int、float、および参照型。さらに、前のリストにある基になる型を持つ列挙型の読み取りと書き込みもアトミックです。long、ulong、double、decimal などの他の型やユーザー定義型の読み取りと書き込みは、アトミックであることが保証されません。

スレッドが null 許容型の共有メモリ変数から部分的に書き込まれた値を読み取ることは完全に可能です。

たとえば、現在 null 値を持つ int? 変数 x があるとします。したがって、この変数には 0 に設定された int と false に設定された bool が含まれます。次に、別のスレッドで、null 許容 int の "5" を x に書き込みます。bool の "true" は、int に 5 が設定される前に設定できるため、別のスレッドが x から null 非許容 int の 0 を読み取ることは完全に合法です。

おすすめ記事