Я пытаюсь использовать базовый массив объектов с использованием C++ 11 Atomics, т.е. ниже:Basic C++ атомный массив
// 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, если какой-либо поток пытается изменить любое местоположение в массиве? Последнее - это поведение, которое я, кажется, получаю во время тестов. Если это так, есть ли лучший способ объявить массив, так что изменение отдельных отдельных ячеек в массиве не влияет друг на друга?
Спасибо.
Если разные атомные объекты могут случайно влиять друг на друга, я не вижу, как вы когда-либо могли бы их программировать. – usr
Вам нужен массив (блок смежной памяти, содержащий смежные данные) или контейнер, который связывает индексы с данными? – Yakk