2017-04-03 1 views
0

glib aは、g_atomic_int_get標準を原子的に読み取る機能を提供します。タイプです。 32ビット整数をメモリからプロセッサにアトミックな操作であることが保証されていないレジスタに読み込んでいませんか(たとえばmov <reg32>, <mem>)?glibのg_atomic_int_getの目的は何ですか?

はいの場合、glibのg_atomic_int_get機能の目的は何ですか?

+1

'プロセッサーによるアトミックな操作であることは既に保証されていませんか?まあ、何のプロセッサーですか?それがどこにあるのか、どこにはないのか確信しています。 – Siguza

+0

intは32ビットではなく、レジスタでもありません。 – user3528438

答えて

5

プロセッサによっては、アラインされていないデータを読み取ることができますが、それには1サイクル以上かかることがあります。私。それはもはや原子ではない。他のものでは、原子的な操作で始まるものではないかもしれません。

0

x86 mov命令は必ずしもアトミックではありません。つまり、non-atomic if the addresses involved are not naturally alignedです。

アトミックであっても、memory barrierではありません。これは、コンパイラが近くの他の命令を参照して命令を自由に並べ替えることを意味します。プロセッサは、実行時に命令ストリーム内の他の命令を参照して命令を自由に並べ替えることができる。

1つのプラットフォームのみをターゲットとするコードを作成していない限り(絶対にコードを別のプラットフォームに移植する必要がないことを確認している場合)、アトミックな保証が必要な場合は常に明示的なアトミック命令を使用する必要があります。

関連する問題