Что ж, документация tr1 :: shared_ptr (которая основана на boost) рассказывает другую историю, которая подразумевает, что управление ресурсами является поточно-ориентированным, тогда как доступ к ресурсу - нет.
»...
Резьба безопасности
Возможности C ++ 0x: поддержка rvalue-ref / move, поддержка распределителя, конструктор псевдонимов, make_shared & allocate_shared. Кроме того, конструкторы, принимающие параметры auto_ptr, устарели в режиме C ++ 0x.
В разделе «Безопасность потоков» в документации Boost shared_ptr говорится, что «объекты shared_ptr обеспечивают тот же уровень безопасности потоков, что и встроенные типы». Реализация должна гарантировать, что одновременные обновления для отдельных экземпляров shared_ptr являются правильными, даже если эти экземпляры совместно используют счетчик ссылок, например
shared_ptr a (новый A);
shared_ptr b (a);
// Тема 1 // Тема 2
a.reset (); b.reset ();
Динамически размещенный объект должен быть уничтожен ровно одним из потоков. Слабые ссылки делают вещи еще интереснее. Общее состояние, используемое для реализации shared_ptr, должно быть прозрачным для пользователя, а инварианты должны сохраняться всегда. Ключевыми элементами общего состояния являются сильные и слабые ссылки. Их обновления должны быть атомарными и видимыми для всех потоков, чтобы обеспечить правильную очистку управляемого ресурса (что, в конце концов, является задачей shared_ptr!). В многопроцессорных системах может потребоваться синхронизация памяти, чтобы обновления подсчета ссылок и уничтожение управляемого ресурса свободны от гонки.
... "
см
http://gcc.gnu.org/onlinedocs/libstdc++/manual/memory.html#std.util.memory.shared_ptr