In our GNU version rather puzzling solutions appear like: void release() // nothrow { if (__gnu_cxx::__exchange_and_add(&_M_use_count, -1) == 1) { dispose(); __glibcxx_mutex_lock(_M_mutex); __glibcxx_mutex_unlock(_M_mutex); weak_release(); } } with empty critical regions, and what else. Document that, possibly mentioning the current weaknesses both from the point of view of correctness and performance and mentioning alternate solutions.
We need to doc much more than that ... we don't have any docs saying which TR1 components are supported or how to make use of them, do we? I had some changes on my hard drive adding docs to the docs/html/ext pages, but now that TR1 is officially sanctioned it might deserve a new docs/html/tr1 dir. Assign this to me if you want.
Your are welcome!
Some related discussion: http://gcc.gnu.org/ml/libstdc++/2007-10/msg00180.html
Between http://gcc.gnu.org/onlinedocs/libstdc++/20_util/shared_ptr.html and http://gcc.gnu.org/onlinedocs/libstdc++/ext/concurrence.html and the shared_ptr code, which has been simplified and commented, I think this can be closed.