summaryrefslogtreecommitdiff
path: root/ACE/ace/Synch_Traits.h
diff options
context:
space:
mode:
Diffstat (limited to 'ACE/ace/Synch_Traits.h')
-rw-r--r--ACE/ace/Synch_Traits.h152
1 files changed, 152 insertions, 0 deletions
diff --git a/ACE/ace/Synch_Traits.h b/ACE/ace/Synch_Traits.h
new file mode 100644
index 00000000000..086e29b1e63
--- /dev/null
+++ b/ACE/ace/Synch_Traits.h
@@ -0,0 +1,152 @@
+// -*- C++ -*-
+
+//==========================================================================
+/**
+ * @file Synch_Traits.h
+ *
+ * $Id$
+ *
+ * Moved from Synch.h.
+ *
+ * @author Douglas C. Schmidt <schmidt@cs.wustl.edu>
+ */
+//==========================================================================
+
+#ifndef ACE_SYNCH_TRAITS_H
+#define ACE_SYNCH_TRAITS_H
+#include /**/ "ace/pre.h"
+
+#include /**/ "ace/config-all.h" /* Need to know threads, template settings */
+#include "ace/Lock.h"
+
+#if !defined (ACE_LACKS_PRAGMA_ONCE)
+# pragma once
+#endif /* ACE_LACKS_PRAGMA_ONCE */
+
+ACE_BEGIN_VERSIONED_NAMESPACE_DECL
+
+// Forward decl
+class ACE_Null_Mutex;
+class ACE_Null_Condition;
+class ACE_Null_Semaphore;
+class ACE_Null_Mutex;
+class ACE_Thread_Mutex;
+class ACE_Process_Mutex;
+class ACE_Recursive_Thread_Mutex;
+class ACE_RW_Thread_Mutex;
+class ACE_Condition_Thread_Mutex;
+class ACE_Condition_Recursive_Thread_Mutex;
+class ACE_Thread_Semaphore;
+
+#if defined (ACE_HAS_TEMPLATE_TYPEDEFS)
+
+/**
+ * @class ACE_NULL_SYNCH
+ *
+ * @brief Implement a do nothing Synchronization wrapper that
+ * typedefs the @c ACE_Condition and @c ACE_Mutex to the
+ * @c Null* versions.
+ */
+class ACE_Export ACE_NULL_SYNCH
+{
+public:
+ typedef ACE_Null_Mutex MUTEX;
+ typedef ACE_Null_Mutex NULL_MUTEX;
+ typedef ACE_Null_Mutex PROCESS_MUTEX;
+ typedef ACE_Null_Mutex RECURSIVE_MUTEX;
+ typedef ACE_Null_Mutex RW_MUTEX;
+ typedef ACE_Null_Condition CONDITION;
+ typedef ACE_Null_Condition RECURSIVE_CONDITION;
+ typedef ACE_Null_Semaphore SEMAPHORE;
+ typedef ACE_Null_Mutex NULL_SEMAPHORE;
+};
+
+#if defined (ACE_HAS_THREADS)
+
+class ACE_Process_Mutex;
+class ACE_Condition_Recursive_Thread_Mutex;
+
+/**
+ * @class ACE_MT_SYNCH
+ *
+ * @brief Implement a default thread safe synchronization wrapper that
+ * typedefs the @c ACE_Condition and @c ACE_Mutex to the
+ * @c ACE_Condition and @c ACE_Mutex versions.
+ *
+ * @todo This should be a template, but SunC++ 4.0.1 complains about
+ * this.
+ */
+class ACE_Export ACE_MT_SYNCH
+{
+public:
+ typedef ACE_Thread_Mutex MUTEX;
+ typedef ACE_Null_Mutex NULL_MUTEX;
+ typedef ACE_Process_Mutex PROCESS_MUTEX;
+ typedef ACE_Recursive_Thread_Mutex RECURSIVE_MUTEX;
+ typedef ACE_RW_Thread_Mutex RW_MUTEX;
+ typedef ACE_Condition_Thread_Mutex CONDITION;
+ typedef ACE_Condition_Recursive_Thread_Mutex RECURSIVE_CONDITION;
+ typedef ACE_Thread_Semaphore SEMAPHORE;
+ typedef ACE_Null_Semaphore NULL_SEMAPHORE;
+};
+
+#endif /* ACE_HAS_THREADS */
+
+#define ACE_SYNCH_MUTEX ACE_SYNCH::MUTEX
+#define ACE_SYNCH_NULL_MUTEX ACE_SYNCH::NULL_MUTEX
+#define ACE_SYNCH_RECURSIVE_MUTEX ACE_SYNCH::RECURSIVE_MUTEX
+#define ACE_SYNCH_RW_MUTEX ACE_SYNCH::RW_MUTEX
+#define ACE_SYNCH_CONDITION ACE_SYNCH::CONDITION
+#define ACE_SYNCH_RECURSIVE_CONDITION ACE_SYNCH::RECURSIVE_CONDITION
+#define ACE_SYNCH_NULL_SEMAPHORE ACE_SYNCH::NULL_SEMAPHORE
+#define ACE_SYNCH_SEMAPHORE ACE_SYNCH::SEMAPHORE
+
+#else /* !ACE_HAS_TEMPLATE_TYPEDEFS */
+
+#if defined (ACE_HAS_OPTIMIZED_MESSAGE_QUEUE)
+#define ACE_NULL_SYNCH ACE_Null_Mutex, ACE_Null_Condition, ACE_Null_Mutex
+#define ACE_MT_SYNCH ACE_Thread_Mutex, ACE_Condition_Thread_Mutex, ACE_Thread_Semaphore
+#else
+#define ACE_NULL_SYNCH ACE_Null_Mutex, ACE_Null_Condition
+#define ACE_MT_SYNCH ACE_Thread_Mutex, ACE_Condition_Thread_Mutex
+#endif /* ACE_HAS_OPTIMIZED_MESSAGE_QUEUE */
+
+#if defined (ACE_HAS_THREADS)
+
+#define ACE_SYNCH_MUTEX ACE_Thread_Mutex
+#define ACE_SYNCH_NULL_MUTEX ACE_Null_Mutex
+#define ACE_SYNCH_RECURSIVE_MUTEX ACE_Recursive_Thread_Mutex
+#define ACE_SYNCH_RW_MUTEX ACE_RW_Thread_Mutex
+#define ACE_SYNCH_CONDITION ACE_Condition_Thread_Mutex
+#define ACE_SYNCH_RECURSIVE_CONDITION ACE_Condition_Recursive_Thread_Mutex
+#define ACE_SYNCH_SEMAPHORE ACE_Thread_Semaphore
+#define ACE_SYNCH_NULL_SEMAPHORE ACE_Null_Semaphore
+
+#else /* ACE_HAS_THREADS */
+
+#define ACE_SYNCH_MUTEX ACE_Null_Mutex
+#define ACE_SYNCH_NULL_MUTEX ACE_Null_Mutex
+#define ACE_SYNCH_RECURSIVE_MUTEX ACE_Null_Mutex
+#define ACE_SYNCH_RW_MUTEX ACE_Null_Mutex
+#define ACE_SYNCH_CONDITION ACE_Null_Condition
+#define ACE_SYNCH_RECURSIVE_CONDITION ACE_Null_Condition
+#define ACE_SYNCH_SEMAPHORE ACE_Null_Semaphore
+#define ACE_SYNCH_NULL_SEMAPHORE ACE_Null_Mutex
+
+#endif /* ACE_HAS_THREADS */
+#endif /* ACE_HAS_TEMPLATE_TYPEDEFS */
+
+// These are available on *all* platforms
+#define ACE_SYNCH_PROCESS_SEMAPHORE ACE_Process_Semaphore
+#define ACE_SYNCH_PROCESS_MUTEX ACE_Process_Mutex
+
+#if defined (ACE_HAS_THREADS)
+#define ACE_SYNCH ACE_MT_SYNCH
+#else /* ACE_HAS_THREADS */
+#define ACE_SYNCH ACE_NULL_SYNCH
+#endif /* ACE_HAS_THREADS */
+
+ACE_END_VERSIONED_NAMESPACE_DECL
+
+#include /**/ "ace/post.h"
+#endif /* ACE_SYNCH_TRAITS_H */