Я сталкивался с некоторыми проблемами с моим атомным контейнером и увидел this link.C++ 11 Безопасность потока std :: atomic <T> копирующие конструкторы
Есть ли причина, по которой std :: atomic не копируется? Решение кажется this, где они просто передают значение T
неатомному конструктору с функцией атомной нагрузки (если я не ошибаюсь).
Так что, в общем, эта версия конструктора конвейера безопасна?
template<typename T>
struct MobileAtomic
{
std::atomic<T> atomic;
explicit MobileAtomic(std::atomic<T> const& a) : atomic(a.load()) {}
};
Непонятно, достигает ли этот код ничего разумного. Atomics служат очень специфической цели, и, как правило, нет смысла копировать их. –
Как аналог: атомный int намного ближе к мьютезу или семафору, чем к целому. Вы можете запросить текущее состояние семафора (что соответствует атомной нагрузке), но нет смысла копировать сам семафор. Это механизм синхронизации и создание копии, если это неразумно. –
Мне также непонятно, что это означает, что «конструктор будет потокобезопасным». Кто строит то, что по-другому? –