Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/131.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 基本C++;原子阵列_C++_Arrays_Multithreading_C++11 - Fatal编程技术网

C++ 基本C++;原子阵列

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

我尝试使用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)); 
//原子数组
std::atomic*数组=新的std::atomic[10];
//存储旧数据
数组[0]。存储(旧对象);
//存储新数据
Object*newObject=newObject();
而(!数组[0]。比较_交换_强(oldObject,newObject));
我的问题是,只有当另一个线程正在修改同一索引处的数组时,CAS操作才能失败吗?或者,如果任何线程试图修改阵列中的任何位置,CAS操作是否会失败?后者是我在测试中似乎得到的行为。如果是,是否有更好的方法声明数组,以便修改数组中的不同单元格不会相互影响


谢谢。

单个缓存线上的IIRC原子变量将共享锁定(在x86{,\u 64})


因此,也许可以扩展数组,并在每一端尝试变量来测试这一点?

如果不同的原子对象可以随机地相互影响,我看不出您将如何对它们进行编程。您需要数组(包含相邻数据的连续内存块)还是将索引与数据关联的容器?