Checkpoint of initial cut at thread pool manager for thrift and related concurrency classes.
git-svn-id: https://svn.apache.org/repos/asf/incubator/thrift/trunk@664721 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/lib/cpp/src/concurrency/Monitor.h b/lib/cpp/src/concurrency/Monitor.h
new file mode 100644
index 0000000..82544f1
--- /dev/null
+++ b/lib/cpp/src/concurrency/Monitor.h
@@ -0,0 +1,59 @@
+#if !defined(_concurrency_mutex_h_)
+#define _concurrency_mutex_h_ 1
+
+namespace facebook { namespace thrift { namespace concurrency {
+
+/** A monitor is a combination mutex and condition-event. Waiting and notifying condition events requires that the caller own the mutex. Mutex
+ lock and unlock operations can be performed independently of condition events. This is more or less analogous to java.lang.Object multi-thread
+ operations
+
+ Note that all methods are const. Monitors implement logical constness, not bit constness. This allows const methods to call monitor
+ methods without needing to cast away constness or change to non-const signatures.
+
+ @author marc
+ @version $Id$ */
+
+class Monitor {
+
+ public:
+
+ Monitor();
+
+ virtual ~Monitor();
+
+ virtual void lock() const;
+
+ virtual void unlock() const;
+
+ virtual void wait(long long timeout=0LL) const;
+
+ virtual void notify() const;
+
+ virtual void notifyAll() const;
+
+ private:
+
+ class Impl;
+
+ Impl* _impl;
+};
+
+class Synchronized {
+ public:
+
+ Synchronized(const Monitor& value) : _monitor(value) {
+ _monitor.lock();
+ }
+
+ ~Synchronized() {
+ _monitor.unlock();
+ }
+
+ private:
+ const Monitor& _monitor;
+};
+
+
+}}} // facebook::thrift::concurrency
+
+#endif // !defined(_concurrency_mutex_h_)