Я проходил через некоторые проблемы с моим атомным контейнером и увидел эта ссылка.
Есть ли причина, по которой std :: atomic не копируется? Решение, кажется, этот где они просто проходят T
значение для неатомарного конструктора с функцией атомарной нагрузки (если я не ошибаюсь).
Так в общем, безопасен ли этот поток конструктора копирования?
template<typename T>
struct MobileAtomic
{
std::atomic<T> atomic;
explicit MobileAtomic(std::atomic<T> const& a) : atomic(a.load()) {}
};
Есть ли причина, по которой std :: atomic не копируется?
да.
Когда вы просите копию конструктив atomic
вы запрашиваете «нормальные» правила однопоточной последовательной согласованности для применения к переменной, которая не следует этим правилам.
По сути, нет обобщенного решения.
Используя конструктор, показанный в вопросе, вы жертвуете детерминированным результатом, поскольку у вас нет гарантии того, что исходный и целевой объекты эквивалентны после завершения строительства.