glib aは、g_atomic_int_get
標準を原子的に読み取る機能を提供します。タイプです。 32ビット整数をメモリからプロセッサにアトミックな操作であることが保証されていないレジスタに読み込んでいませんか(たとえばmov <reg32>, <mem>
)?glibのg_atomic_int_getの目的は何ですか?
はいの場合、glibのg_atomic_int_get
機能の目的は何ですか?
glib aは、g_atomic_int_get
標準を原子的に読み取る機能を提供します。タイプです。 32ビット整数をメモリからプロセッサにアトミックな操作であることが保証されていないレジスタに読み込んでいませんか(たとえばmov <reg32>, <mem>
)?glibのg_atomic_int_getの目的は何ですか?
はいの場合、glibのg_atomic_int_get
機能の目的は何ですか?
プロセッサによっては、アラインされていないデータを読み取ることができますが、それには1サイクル以上かかることがあります。私。それはもはや原子ではない。他のものでは、原子的な操作で始まるものではないかもしれません。
x86 mov
命令は必ずしもアトミックではありません。つまり、non-atomic if the addresses involved are not naturally alignedです。
アトミックであっても、memory barrierではありません。これは、コンパイラが近くの他の命令を参照して命令を自由に並べ替えることを意味します。プロセッサは、実行時に命令ストリーム内の他の命令を参照して命令を自由に並べ替えることができる。
1つのプラットフォームのみをターゲットとするコードを作成していない限り(絶対にコードを別のプラットフォームに移植する必要がないことを確認している場合)、アトミックな保証が必要な場合は常に明示的なアトミック命令を使用する必要があります。
'プロセッサーによるアトミックな操作であることは既に保証されていませんか?まあ、何のプロセッサーですか?それがどこにあるのか、どこにはないのか確信しています。 – Siguza
intは32ビットではなく、レジスタでもありません。 – user3528438