Odczytanie szkicu C++ 11 n3242, sekcja 20.7.2.5, wygląda na to, że mamy operacje atomowe na shared_ptr, co pozwala nam na blokowanie skomplikowanej struktury bez martwienia się o GC /wyciek pamięci.Operacje atomowe dla shared_ptr w C++ 11
Jednak nie mogłem z powodzeniem używać go w GCC-4.7.0. Po prostu przetestowane następujący program
#include <atomic>
#include <memory>
#include <string>
struct X {
int x;
double y;
std::string s;
};
int main() {
std::shared_ptr<X> x(new X);
auto p = std::atomic_load(&x);
}
i ma błąd kompilatora:
c.cpp:13:33: error: no matching function for call to ‘atomic_load(std::shared_ptr<X>*)’
Czy ktoś wie, co brakowało mi tutaj? A może po prostu GCC jeszcze tego nie zaimplementował?
Wewnętrzna liczba referencyjna 'shared_ptr <>' będzie atomowo zwiększana i zmniejszana bez pisania żadnych specjalnych. Co dokładnie próbujesz zrobić z 'atomic_load'? – ildjarn
@ildjarn, przeczytaj ten http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2674.htm –
@ildjarn Jeśli wątki zmieniają się, co wskazuje zmienna shared_ptr, musisz unikać Wyścigi danych podczas uzyskiwania dostępu do samego shared_ptr. – bames53