[omniORB] Recursive mutex class for omnithreads
Peter S. Housel
housel at acm.org
Tue Jun 28 08:26:22 BST 2005
It would be nice if omnithreads provided a recursive mutex class. The
following is a portable implementation of recursive mutexes in terms of
the other omnithreads primitives.
class omni_recursive_mutex {
omni_mutex nesting_mutex_;
omni_condition cond_;
volatile unsigned level_;
volatile omni_thread *thread_;
public:
omni_recursive_mutex()
: cond_(&nesting_mutex_), level_(0), thread_(0) {
}
void lock() {
nesting_mutex_.lock();
if(level_ == 0) {
thread_ = omni_thread::self();
} else if(thread_ != omni_thread::self()) {
while(level_ > 0)
cond_.wait();
thread_ = omni_thread::self();
}
++level_;
nesting_mutex_.unlock();
}
void unlock() {
nesting_mutex_.lock();
if(--level_ == 0) {
thread_ = 0;
cond_.signal();
}
nesting_mutex_.unlock();
}
};
--
Peter S. Housel <housel at acm.org>
More information about the omniORB-list
mailing list