[llvm-commits] CVS: llvm/include/llvm/Support/MutexGuard.h ThreadSupport-NoSupport.h ThreadSupport-PThreads.h ThreadSupport.h.in

Reid Spencer reid at x10sys.com
Tue Jul 12 08:52:08 PDT 2005



Changes in directory llvm/include/llvm/Support:

MutexGuard.h updated: 1.4 -> 1.5
ThreadSupport-NoSupport.h (r1.3) removed
ThreadSupport-PThreads.h (r1.5) removed
ThreadSupport.h.in (r1.4) removed
---
Log message:

For PR540: http://llvm.cs.uiuc.edu/PR540 :
This patch completes the changes for making lli thread-safe. Here's the list
of changes:
* The Support/ThreadSupport* files were removed and replaced with the 
  MutexGuard.h file since all ThreadSupport* declared was a Mutex Guard.
  The implementation of MutexGuard.h is now based on sys::Mutex which hides
  its implementation and makes it unnecessary to have the -NoSupport.h and
  -PThreads.h versions of ThreadSupport.

* All places in ExecutionEngine that previously referred to "Mutex" now 
  refer to sys::Mutex

* All places in ExecutionEngine that previously referred to "MutexLocker"
  now refer to MutexGuard (this is frivolous but I believe the technically
  correct name for such a class is "Guard" not a "Locker"). 

These changes passed all of llvm-test. All we need now are some test cases
that actually use multiple threads.



---
Diffs of the changes:  (+23 -24)

 MutexGuard.h |   47 +++++++++++++++++++++++------------------------
 1 files changed, 23 insertions(+), 24 deletions(-)


Index: llvm/include/llvm/Support/MutexGuard.h
diff -u llvm/include/llvm/Support/MutexGuard.h:1.4 llvm/include/llvm/Support/MutexGuard.h:1.5
--- llvm/include/llvm/Support/MutexGuard.h:1.4	Sun Feb 27 13:05:24 2005
+++ llvm/include/llvm/Support/MutexGuard.h	Tue Jul 12 10:51:55 2005
@@ -1,4 +1,4 @@
-//===-- Support/ThreadSupport.h - Generic threading support -----*- C++ -*-===//
+//===-- Support/MutexGuard.h - Acquire/Release Mutex In Scope ---*- C++ -*-===//
 // 
 //                     The LLVM Compiler Infrastructure
 //
@@ -7,36 +7,35 @@
 // 
 //===----------------------------------------------------------------------===//
 //
-// This file defines platform-agnostic interfaces that can be used to write
-// multi-threaded programs.  Autoconf is used to chose the correct
-// implementation of these interfaces, or default to a non-thread-capable system
-// if no matching system support is available.
+// This file defines a guard for a block of code that ensures a Mutex is locked
+// upon construction and released upon destruction.
 //
 //===----------------------------------------------------------------------===//
 
-#ifndef LLVM_SUPPORT_THREADSUPPORT_H
-#define LLVM_SUPPORT_THREADSUPPORT_H
+#ifndef LLVM_SUPPORT_MUTEXGUARD_H
+#define LLVM_SUPPORT_MUTEXGUARD_H
 
-#undef HAVE_PTHREAD_MUTEX_LOCK
-
-#ifdef HAVE_PTHREAD_MUTEX_LOCK
-#include "llvm/Support/ThreadSupport-PThreads.h"
-#else
-#include "llvm/Support/ThreadSupport-NoSupport.h"
-#endif // If no system support is available
+#include <llvm/System/Mutex.h>
 
 namespace llvm {
-  /// MutexLocker - Instances of this class acquire a given Lock when
-  /// constructed and hold that lock until destruction.
-  ///
-  class MutexLocker {
-    Mutex &M;
-    MutexLocker(const MutexLocker &);    // DO NOT IMPLEMENT
-    void operator=(const MutexLocker &); // DO NOT IMPLEMENT
+  /// Instances of this class acquire a given Mutex Lock when constructed and 
+  /// hold that lock until destruction. The intention is to instantiate one of
+  /// these on the stack at the top of some scope to be assured that C++
+  /// destruction of the object will always release the Mutex and thus avoid
+  /// a host of nasty multi-threading problems in the face of exceptions, etc.
+  /// @brief Guard a section of code with a Mutex.
+  class MutexGuard {
+    sys::Mutex &M;
+    MutexGuard(const MutexGuard &);    // DO NOT IMPLEMENT
+    void operator=(const MutexGuard &); // DO NOT IMPLEMENT
   public:
-    MutexLocker(Mutex &m) : M(m) { M.acquire(); }
-    ~MutexLocker() { M.release(); }
+    MutexGuard(sys::Mutex &m) : M(m) { M.acquire(); }
+    ~MutexGuard() { M.release(); }
+    /// holds - Returns true if this locker instance holds the specified lock.
+    /// This is mostly used in assertions to validate that the correct mutex
+    /// is held.
+    bool holds(const sys::Mutex& lock) const { return &M == &lock; } 
   };
 }
 
-#endif // SUPPORT_THREADSUPPORT_H
+#endif // LLVM_SUPPORT_MUTEXGUARD_H






More information about the llvm-commits mailing list