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. Кажется, это работает на первый взгляд. Я должен сделать больше тестов на этом все же.