I think I have a kind really bad concepts problems. Why I simple get a lot of race conditions error with valgrind. First i thought that could be a bug, and I saw in forums that
Read the fabulous manual: http://gcc.gnu.org/onlinedocs/libstdc++/manual/debug.html#debug.races
The code is OK, valgrind doesn't understand the atomic operations we use inside std::shared_ptr and incorrectly reports them as races.
std::shared_ptr