Al leer el borrador de C++ 11 n3242, sección 20.7.2.5, parece que tenemos operaciones atómicas en shared_ptr, lo que nos permite hacer lock-free en estructuras complicadas sin preocuparnos por GC /pérdida de memoria.operaciones atómicas para shared_ptr en C++ 11
Sin embargo, no pude usarlo con éxito en GCC-4.7.0. Simplemente probado el siguiente programa
#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);
}
y tiene error del compilador:
c.cpp:13:33: error: no matching function for call to ‘atomic_load(std::shared_ptr<X>*)’
¿Alguien sabe lo que me perdí aquí? ¿O simplemente es que gcc no ha implementado eso todavía?
El contador de referencias internas 'shared_ptr <>' se incrementará y disminuirá atómicamente sin escribir ningún especial. ¿Qué intentas hacer con 'atomic_load' exactamente ...? – ildjarn
@ildjarn, lea esto http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2674.htm –
@ildjarn Si los hilos están cambiando a qué apunta una variable shared_ptr, debe evitar carreras de datos al acceder al shared_ptr en sí. – bames53