2016-04-09 6 views
0

gcc(CおよびC++用)は、volatileオブジェクトへのアライメントされたアクセスがアトミックであることを保証しますか?gccは揮発性整数への整列したアクセスをアトミックにすることを保証しますか?

*((volatile unsigned int*)ADDRESS_DIVISIBLE_BY_4) = SOME_CONSTANT; 

unsigned int sizeが4の場合、上記の行の背後にあるストア・マシン命令がテイクされないことが保証されていますか?

注:この質問には、注文ではなく、原価が記載されています。 これは並行性とは関係なく、1ステップストア命令を必要とするメモリマップドレジスタに関連しています。

+0

http://preshing.com/20130618/atomic-vs-non-atomic-operations/ – user3528438

+0

私はすでに一般的な視点から答えてきました。しかし、ハードウェアのアーキテクチャーと、それをアトミックにする理由について、より具体的に説明できますか? – Christophe

+0

私は32ビットレジスタ全体にワンステップで書き込む必要がある場合を参照します。マイクロコントローラのプログラミングでは一般的です。問題は、それがC言語レベルから正しく行われていることを確認する方法です。 – mrn

答えて

2

揮発性は決して原子とはみなされません。それはalmost useless from the point of view of concurrencyです。

+0

32ビットハードウェアレジスタに1ステップで書き込みたい場合、これをどのように達成できますか?さらにもう1つの質問 - LinuxカーネルのWRITE_ONCEマクロとREAD_ONCEマクロはどうですか? – mrn

+0

@mrnなぜあなたはワンステップでそれをしたいですか?なぜGCCアトム拡張を使用しないのですか? – user3528438

+0

@ user3528438ハードウェアがメモリマップされたI/Oへの32ビットアクセスを必要とするため、これを一歩進めてください。 GCCのアトミック拡張は便利ですが、例えばLinuxカーネルは、アラインメントとvolatile修飾子に基づいてWRITE_ONCE/READ_ONCEマクロを定義します。したがって、私はGCCの保証について尋ねています。 – mrn

関連する問題