Leggendo la bozza di C++ 11 n3242, sezione 20.7.2.5, sembra che abbiamo operazioni atomiche su shared_ptr, che ci consente di eseguire il lock-free su una struttura complicata senza preoccuparci di GC /perdita di memoria.operazioni atomiche per shared_ptr in C++ 11
Tuttavia, non è stato possibile utilizzarlo correttamente in GCC-4.7.0. Ho semplicemente provato il seguente programma
#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);
}
e ha errore di compilazione:
c.cpp:13:33: error: no matching function for call to ‘atomic_load(std::shared_ptr<X>*)’
Qualcuno sa quello che ho perso qui? O semplicemente gcc non l'ha ancora implementato?
Il conteggio dei riferimenti interni 'shared_ptr <>' verrà incrementato e decrementato atomicamente senza scrivere alcuno speciale. Cosa stai cercando di fare con 'atomic_load' esattamente ..? – ildjarn
@ildjarn, leggi questo http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2674.htm –
@ildjarn Se i thread stanno cambiando ciò che una variabile shared_ptr punta a te devi evitare dati razze quando si accede alla shared_ptr stessa. – bames53