std :: atomic с пользовательским классом (C ++ 11)

Я использую std :: atomic с пользовательским классом в моей библиотеке. Все отлично работает с MSVC, но теперь, когда яя пытаюсь заставить его работать на macOS, я получаю ошибку компоновщика:

неопределенные символы для архитектуры x86_64: "__atomic_store», ссылка на которую: _main in main.oI '

мы создали некоторый тестовый код, чтобы повторить это

#include 
#include 

using namespace std;

class Vec {
    public:
    int x, y, z;
    Vec() { x = y = z = 0; }
};

std::atomic x;


int main()
{
  Vec a;
  x = a;
  cin.get();
    return 0;
}

Конечно, этот пример нене имеет большого смысла, но этоЭто самое короткое, что я мог придумать. Он работает в VS2012, но не в xcode (что дает мне ошибку компоновщика, показанную выше).

И что'происходит? Я злоупотребляю std :: atomic здесь? Библиотека, которую яm работает над многопоточным и используется для обработки аудио. Так что если яя не использую std :: atomic правильным образом, это не совсем показывает, потому что производительность очень хорошая, и я неу него нет проблем с многопоточностью. Или xcode, возможно, чего-то не хватает?

Обновление: Я

проверил андрейs ответ, потому что он имеет больше информации, хотя все 3 ответа полезны. Я'Я не эксперт в этом (очевидно), но кажется, что VS2012 выходит за рамки того, что должно быть реализовано в C ++ 11.

Так как идти отсюда? Я вижу несколько вариантов.

Дон»не использовать атомарный для этого класса. В моем конкретном случае это было бы очень сложно, потому что мой векторный класс используется во всем коде. Блокировка и разблокировка мьютексов, вероятно, сильно замедлит процесс.Реализуй свои функции для атомарного. Это выглядит очень сложно для меня. Я'сохраню это как последний вариант.Посмотрим, можно ли что-то сделать с boost :: atomic. Кажется, это работает на первый взгляд. Я должен сделать больше тестов на этом все же.

Ответы на вопрос(2)

Ваш ответ на вопрос