我編譯和分析組件輸出:原子商店。結構
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;
}
我想看看怎麼做是它實際上執行atomic store
。當對齊「小」操作數時很容易。但是,現在我們有更廣泛的操作數,所以這是一個更復雜的情況。
在我的其他問題(Atomicity on x86)@Peter柯德斯說:
對於較寬操作數,像原子寫入新的數據分成多個struct的 條目,你需要用一個鎖來保護它,所有 訪問它的尊重。 (您可以使用86鎖定cmpxchg16b 與重試循環做一個原子16B店。請注意,有沒有辦法 效仿無鎖)。
好,但它是什麼意思完全相同?這意味着什麼鎖定? 特別是,我知道lock
是確保「前綴」指令的原子性的前綴。特別是,@Peter柯德斯說:
您可以使用86鎖定cmpxchg16b 與重試循環做一個原子16B店
我不明白它是如何能夠保持它的原子?好吧,我可以想象,16B的內存塊可以以原子方式存儲嗎?但接下來的迭代呢?
我希望我的疑惑是可以理解的,因爲我有一個問題來表達它。
我正在調試上面的程序,並在我眼中,魔術背後atomic_store
。 我想這個函數會執行@Peter Cordes所說的。如果有人想,我可以粘貼在這裏拆卸__atomic_store
你說你已經分析了生成的機器碼。那麼,你*可以告訴我們*這是如何實現的! –
是的,繼續並粘貼__atomic_store的反彙編。 gcc只是通過引用傳入的數據來生成一個調用。 –
我在這裏錯過了這個問題嗎? –