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_)