This is a bit of a two part question, all about the atomicity of std::shared_ptr:
std::shared_ptr
1. As far as I can tell, std::shared_ptr
Boost provides a shared_ptr that's non-atomic. It's called local_shared_ptr, and can be found in the smart pointers library of boost.
shared_ptr