ARM Cortex-A9 MPCore 実装での 32 ビット整数の割り当てとアクセスはアトミック操作であり、割り当てられた値はすべてのコアと同期されていると想定しても安全ですか? Cコンパイラはそれを保証しますか?
uint32_t *p;
*p = 4711;
と
uint32_t *p;
return *p;
アセンブラでアトミック操作に変換されますか?
「アトミック」と「すべてのコアと同期」は異なる要件です。市場に出回っているすべての ARM コアは、32 ビット操作をメモリにアトミックに実装しています (つまり、残りの部分がなければ、単語の「一部」が表示されることはありません)。 それらのすべてがコア間でキャッシュ一貫性があるわけではなく、詳細 (特に big.LITTLE のようなより風変わりな構成の場合) は複雑です。
OS 同期プリミティブを使用します。その複雑さは、彼らが抽象化するように設計されているものです.
いいえ、それが strex/ldrex の理由です。コア内では、通常の str と ldr は問題ありませんが、他のコアへのアクセスを保証するには、strex/ldrex を使用する必要があります (およびそれらをサポートするメモリ システムが必要です)。