OSDN Git Service

Add boost SVN version Number 12762
[tortoisegit/TortoiseGitJp.git] / ext / boost / boost / pool / detail / mutex.hpp
diff --git a/ext/boost/boost/pool/detail/mutex.hpp b/ext/boost/boost/pool/detail/mutex.hpp
new file mode 100644 (file)
index 0000000..9fa8f8e
--- /dev/null
@@ -0,0 +1,145 @@
+// Copyright (C) 2000 Stephen Cleary\r
+//\r
+// Distributed under the Boost Software License, Version 1.0. (See\r
+// accompanying file LICENSE_1_0.txt or copy at\r
+// http://www.boost.org/LICENSE_1_0.txt)\r
+//\r
+// See http://www.boost.org for updates, documentation, and revision history.\r
+\r
+#ifndef BOOST_POOL_MUTEX_HPP\r
+#define BOOST_POOL_MUTEX_HPP\r
+\r
+#include <boost/config.hpp>  // for workarounds\r
+\r
+// Extremely Light-Weight wrapper classes for OS thread synchronization\r
+\r
+// Configuration: for now, we just choose between pthread or Win32 mutexes or none\r
+\r
+#define BOOST_MUTEX_HELPER_NONE         0\r
+#define BOOST_MUTEX_HELPER_WIN32        1\r
+#define BOOST_MUTEX_HELPER_PTHREAD      2\r
+\r
+#if !defined(BOOST_HAS_THREADS) && !defined(BOOST_NO_MT)\r
+# define BOOST_NO_MT\r
+#endif\r
+\r
+#ifdef BOOST_NO_MT\r
+  // No multithreading -> make locks into no-ops\r
+  #define BOOST_MUTEX_HELPER BOOST_MUTEX_HELPER_NONE\r
+#else\r
+  #ifdef BOOST_WINDOWS\r
+    #define BOOST_MUTEX_HELPER BOOST_MUTEX_HELPER_WIN32\r
+  #else\r
+    #include <unistd.h>\r
+    #ifdef _POSIX_THREADS\r
+      #define BOOST_MUTEX_HELPER BOOST_MUTEX_HELPER_PTHREAD\r
+    #endif\r
+  #endif\r
+#endif\r
+\r
+#ifndef BOOST_MUTEX_HELPER\r
+  #error Unable to determine platform mutex type; define BOOST_NO_MT to assume single-threaded\r
+#endif\r
+\r
+#ifndef BOOST_NO_MT\r
+# ifdef BOOST_WINDOWS\r
+#  include <windows.h>\r
+# endif\r
+# ifdef _POSIX_THREADS\r
+#  include <pthread.h>\r
+# endif\r
+#endif\r
+\r
+namespace boost {\r
+\r
+namespace details {\r
+namespace pool {\r
+\r
+#ifndef BOOST_NO_MT\r
+\r
+#ifdef BOOST_WINDOWS\r
+\r
+class win32_mutex\r
+{\r
+  private:\r
+    CRITICAL_SECTION mtx;\r
+\r
+    win32_mutex(const win32_mutex &);\r
+    void operator=(const win32_mutex &);\r
+\r
+  public:\r
+    win32_mutex()\r
+    { InitializeCriticalSection(&mtx); }\r
+\r
+    ~win32_mutex()\r
+    { DeleteCriticalSection(&mtx); }\r
+\r
+    void lock()\r
+    { EnterCriticalSection(&mtx); }\r
+\r
+    void unlock()\r
+    { LeaveCriticalSection(&mtx); }\r
+};\r
+\r
+#endif // defined(BOOST_WINDOWS)\r
+\r
+#ifdef _POSIX_THREADS\r
+\r
+class pthread_mutex\r
+{\r
+  private:\r
+    pthread_mutex_t mtx;\r
+\r
+    pthread_mutex(const pthread_mutex &);\r
+    void operator=(const pthread_mutex &);\r
+\r
+  public:\r
+    pthread_mutex()\r
+    { pthread_mutex_init(&mtx, 0); }\r
+\r
+    ~pthread_mutex()\r
+    { pthread_mutex_destroy(&mtx); }\r
+\r
+    void lock()\r
+    { pthread_mutex_lock(&mtx); }\r
+\r
+    void unlock()\r
+    { pthread_mutex_unlock(&mtx); }\r
+};\r
+\r
+#endif // defined(_POSIX_THREADS)\r
+\r
+#endif // !defined(BOOST_NO_MT)\r
+\r
+class null_mutex\r
+{\r
+  private:\r
+    null_mutex(const null_mutex &);\r
+    void operator=(const null_mutex &);\r
+\r
+  public:\r
+    null_mutex() { }\r
+\r
+    static void lock() { }\r
+    static void unlock() { }\r
+};\r
+\r
+#if BOOST_MUTEX_HELPER == BOOST_MUTEX_HELPER_NONE\r
+  typedef null_mutex default_mutex;\r
+#elif BOOST_MUTEX_HELPER == BOOST_MUTEX_HELPER_WIN32\r
+  typedef win32_mutex default_mutex;\r
+#elif BOOST_MUTEX_HELPER == BOOST_MUTEX_HELPER_PTHREAD\r
+  typedef pthread_mutex default_mutex;\r
+#endif\r
+\r
+} // namespace pool\r
+} // namespace details\r
+\r
+} // namespace boost\r
+\r
+#undef BOOST_MUTEX_HELPER_WIN32\r
+#undef BOOST_MUTEX_HELPER_PTHREAD\r
+#undef BOOST_MUTEX_HELPER_NONE\r
+#undef BOOST_MUTEX_HELPER\r
+\r
+#endif\r