
On Nov 1, 2006, at 4:06 PM, Roland Schwarz wrote:
So we would end up with mutex and recursive_mutex, yes?
Instead of a recursive_mutex, how would you feel about a recursive_mutex *adaptor* (like stack is to containers). Here's a prototype. Warning, it is not mature: template <class Mutex> class recursive_mutex { private: Mutex& mut_; unsigned count_; thread_util::id id_; public: explicit recursive_mutex(Mutex& mut) : mut_(mut), count_(0), id_(thread_self::not_any_thread()) {} void lock() { thread_self::id self = thread_self::current(); if (thread_self::equal(id_, self)) ++count_; else { mut_.lock(); id_ = self; store_release(&count_, 1); } } void unlock() { if (--count_ == 0) { id_ = thread_self::not_any_thread(); mut_.unlock(); } } }; The basic idea is a mutex *adaptor*. Everything else I have wrong above is just details. ;-) -Howard