diff options
author | Ian Lance Taylor <iant@google.com> | 2007-11-22 00:05:51 +0000 |
---|---|---|
committer | Ian Lance Taylor <iant@google.com> | 2007-11-22 00:05:51 +0000 |
commit | c79126688f8211ab17a893c5e80b09811d424fc1 (patch) | |
tree | 23a727f6718dc203a4e3b9ef1575e8a10b6f0d80 /gold/gold-threads.h | |
parent | 06d063c072d0e247751535bc5e394aa7b8be3b0f (diff) | |
download | gdb-c79126688f8211ab17a893c5e80b09811d424fc1.zip gdb-c79126688f8211ab17a893c5e80b09811d424fc1.tar.gz gdb-c79126688f8211ab17a893c5e80b09811d424fc1.tar.bz2 |
Add threading support.
Diffstat (limited to 'gold/gold-threads.h')
-rw-r--r-- | gold/gold-threads.h | 67 |
1 files changed, 59 insertions, 8 deletions
diff --git a/gold/gold-threads.h b/gold/gold-threads.h index a6f1752..45f18ad 100644 --- a/gold/gold-threads.h +++ b/gold/gold-threads.h @@ -34,24 +34,45 @@ namespace gold { -class Lock_impl; class Condvar; +// The interface for the implementation of a Lock. + +class Lock_impl +{ + public: + Lock_impl() + { } + + virtual + ~Lock_impl() + { } + + virtual void + acquire() = 0; + + virtual void + release() = 0; +}; + // A simple lock class. class Lock { public: Lock(); + ~Lock(); // Acquire the lock. void - acquire(); + acquire() + { this->lock_->acquire(); } // Release the lock. void - release(); + release() + { this->lock_->release(); } private: // This class can not be copied. @@ -86,7 +107,27 @@ class Hold_lock Lock& lock_; }; -class Condvar_impl; +// The interface for the implementation of a condition variable. + +class Condvar_impl +{ + public: + Condvar_impl() + { } + + virtual + ~Condvar_impl() + { } + + virtual void + wait(Lock_impl*) = 0; + + virtual void + signal() = 0; + + virtual void + broadcast() = 0; +}; // A simple condition variable class. It is always associated with a // specific lock. @@ -100,12 +141,22 @@ class Condvar // Wait for the condition variable to be signalled. This should // only be called when the lock is held. void - wait(); + wait() + { this->condvar_->wait(this->lock_.get_impl()); } + + // Signal the condition variable--wake up at least one thread + // waiting on the condition variable. This should only be called + // when the lock is held. + void + signal() + { this->condvar_->signal(); } - // Signal the condition variable. This should only be called when - // the lock is held. + // Broadcast the condition variable--wake up all threads waiting on + // the condition variable. This should only be called when the lock + // is held. void - signal(); + broadcast() + { this->condvar_->broadcast(); } private: // This class can not be copied. |