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
cout is a resource and should be mutex-ed (race condition if >1 thread of do_something() or other uses of cout)
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.