[英]Basic C++ atomic array
我試圖使用C ++ 11原子的基本對象數組,即下面:
// Atomic array
std::atomic<Object*> *array = new std::atomic<Object*>[10];
// Storing old data
array[0].store(oldObject);
// Store the new data
Object *newObject = new Object();
while(!array[0].compare_exchange_strong(oldObject,newObject));
我的問題是, 只有當另一個線程在相同的索引處修改數組時,CAS操作才能失敗嗎? 或者,如果任何線程試圖修改陣列中的任何位置,CAS操作是否會失敗? 后者是我在測試中似乎得到的行為。 如果是這樣,是否有更好的方法來聲明一個數組,以便修改數組中不同的單個單元格不會相互影響?
謝謝。
單個緩存行上的IIRC原子變量將共享鎖定(在x86 {,_ 64}上)。
那么可能擴展數組並在每一端嘗試變量來測試?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.