C++ 基本C++;原子阵列
我尝试使用C++11原子来使用一个基本的对象数组,如下所示:C++ 基本C++;原子阵列,c++,arrays,multithreading,c++11,C++,Arrays,Multithreading,C++11,我尝试使用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_ex
// 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));
//原子数组
std::atomic*数组=新的std::atomic[10];
//存储旧数据
数组[0]。存储(旧对象);
//存储新数据
Object*newObject=newObject();
而(!数组[0]。比较_交换_强(oldObject,newObject));
我的问题是,只有当另一个线程正在修改同一索引处的数组时,CAS操作才能失败吗?或者,如果任何线程试图修改阵列中的任何位置,CAS操作是否会失败?后者是我在测试中似乎得到的行为。如果是,是否有更好的方法声明数组,以便修改数组中的不同单元格不会相互影响
谢谢。单个缓存线上的IIRC原子变量将共享锁定(在x86{,\u 64})
因此,也许可以扩展数组,并在每一端尝试变量来测试这一点?如果不同的原子对象可以随机地相互影响,我看不出您将如何对它们进行编程。您需要数组(包含相邻数据的连续内存块)还是将索引与数据关联的容器?