私がコンパイルされ、アセンブリのための出力に分析しました:私はそれが実際にatomic store
を実装されているんどのように見てみたいアトミックストア。構造
struct S{
public:
int a,b,c,d,e,f,g,h,i,j,k;
};
int main() {
S s;
std::atomic<S> as;
as.store(s);
return 0;
}
を。 "小さな"オペランドを整列するのは簡単です。しかし、今や我々はより広いオペランドを持っているので、より複雑な状況です。私の他の質問(Atomicity on x86)@Peterコルドで
は言った:広いオペランドについては
を、アトミック構造体の複数の エントリに新しいデータを書き込むように、あなたはすべての ロックでそれを保護する必要がありますそれを尊重します。
OK(あなたは。ロックせずにそれをエミュレートする方法 がないことに注意してください。アトミック16bのストアを行うために再試行ループで cmpxchg16b x86のロックを使用することができる場合があります)が、それは正確に何を意味するのでしょ?ロックするのはどういう意味ですか? 特に、私はlock
が "接頭語"命令のアトミック性を保証するプレフィックスであることを知っています。特に、@Peterコルドは言った:
をあなたが、私はそれをアトミックを維持することができる方法を理解することはできませんアトミック16bのストア
を行うために再試行ループでのx86ロックcmpxchg16b を使用することができる可能性が?確かに、16Bのメモリチャンクは原子的に格納できると思いますか?しかし、次の反復についてはどうですか?
私はそれを表現するのに問題があったので私の疑いが理解できることを願っています。
私は、上記のプログラムをデバッグしてそして、私の目には、魔法はatomic_store
の背後にあります。 この関数は@Peter Cordesが言ったことを実行すると思います。誰かが望むなら、私はここに貼り付けることができ__atomic_store
あなたは生成されたマシンコードを分析したと言いました。さて、あなたは*これがどのように実装されているかを私たちに伝えることができます! –
はい、__atomic_storeの逆アセンブリで貼り付けてください。 gccは、格納されるデータを参照渡しで呼び出します。 –
ここに質問がありませんか? –