簡體   English   中英

基本C ++原子數組

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM