Kitaplığımda özel bir sınıfla std :: atomic kullanıyorum. Tüm MSVC ile çalışıyor, ama şimdi o MacOS çalışmasına almaya çalışıyorum ki ben bir bağlayıcı hatası alıyorum: mimari x86_64 içinstd :: atomic
tanımlanmamış sembolleri: "__atomic_store", başvurulan: Ana içinde _main.
o ben bu örnek çok mantıklı değildir tabii bu
#include <iostream>
#include <atomic>
using namespace std;
class Vec {
public:
int x, y, z;
Vec() { x = y = z = 0; }
};
std::atomic<Vec> x;
int main()
{
Vec a;
x = a;
cin.get();
return 0;
}
çoğaltmak için bazı test kodunu oluşturduk ama ben ile gelebilir en kısa var. VS2012'de çalışır, ancak xcode'ta değil (bana yukarıda gösterilen bağlayıcı hatası verir).
Peki neler oluyor? Std :: atomic'i burada mı kötüye kullandım? Üzerinde çalıştığım kütüphane çok iş parçacıklı ve ses işleme için kullanılıyor. Yani std :: atomic'i doğru şekilde kullanmıyorum, bu gerçekten göstermiyor çünkü performans çok iyi ve onunla ilgili herhangi bir sorun yok. Ya da belki bir şey eksik xcode nedir?
Güncelleme: 3 cevaplar yararlıdır rağmen, çoğu bilgiler çünkü andrey cevabını kontrol ettim
. Bu konuda uzman değilim (belli ki), fakat VS2012'nin C++ 11'de uygulanması gerekenleri aştığı görülüyor.
Peki buradan nasıl gidilir? Birkaç seçenek görüyorum.
- Bu sınıf için atomik kullanmayın. Benim özel durumumda bu çok zor olurdu çünkü benim vektör sınıfım kodun her yerinde kullanılıyor. Mutekslerin kilitlenmesi ve kilidinin açılması büyük olasılıkla işleri yavaşlatır.
- Atomik için işlevleri kendim uygula. Bu benim için çok karmaşık görünüyor. Son seçenek olarak kaydedeceğim.
- Boost :: atomic ile bir şey yapılıp yapılamayacağını görün. Bu ilk bakışta işe yarıyor gibi görünüyor. Bununla ilgili daha fazla test yapmak zorundayım. Standart kitaplık clang derleyici ayarlarında yılında proje sayfasında kullandığımız
Otel sade desteklenmiyor olabilir. – GManNickG