セクション5.5のC#仕様ではbool
、特定の型(つまり、、、、、、、、、、、、、および参照型)の読み取りと書き込みはアトミックであることが保証されています。char
byte
sbyte
short
ushort
uint
int
float
これは私の興味をそそりました。どうやってそれができる?つまり、個人的な経験では、読み取りと書き込みをアトミックに見せたい場合は、変数をロックするか、バリアを使用することしかできませんでした。読み取り/書き込みごとに実行する必要がある場合は、パフォーマンスが低下します。それでも、C#は同様の効果で何かをします。
おそらく他の言語(Javaなど)がそれを行います。真剣にわかりません。私の質問は、実際には言語固有のものではありません。C#がそれを実行していることを知っているだけです。
特定のプロセッサ命令を処理する必要があり、C /C++では使用できない可能性があることを理解しています。しかし、それでもどのように機能するのか知りたいです。
[編集]実を言うと、CPUがメモリ位置にアクセスしているときに、別のCPUがメモリ位置にアクセスするなど、特定の条件では読み取りと書き込みが非アトミックになる可能性があると私は信じていました。これは、CPUがすべてのオブジェクトを一度に処理できない場合にのみ発生しますか?たとえば、オブジェクトが大きすぎるため、またはメモリが適切な境界に配置されていないためですか?