Parcourir la source

[2198] Add a block argument to Mutex::Locker's constructor

Mukund Sivaraman il y a 12 ans
Parent
commit
f8fb9a002d
1 fichiers modifiés avec 12 ajouts et 3 suppressions
  1. 12 3
      src/lib/util/threads/sync.h

+ 12 - 3
src/lib/util/threads/sync.h

@@ -89,15 +89,24 @@ public:
 
         /// \brief Constructor.
         ///
-        /// Locks the mutex. May block for extended period of time.
+        /// Locks the mutex. May block for extended period of time if
+        /// \c block is true.
         ///
         /// \throw isc::InvalidOperation when OS reports error. This usually
         ///     means an attempt to use the mutex in a wrong way (locking
         ///     a mutex second time from the same thread, for example).
-        Locker(Mutex& mutex) :
+        /// \throw AlreadyLocked if \c block is false and the mutex is
+        ///     already locked.
+        Locker(Mutex& mutex, bool block = true) :
             mutex_(mutex)
         {
-            mutex.lock();
+            if (block) {
+                mutex.lock();
+            } else {
+                if (!mutex.tryLock()) {
+                    isc_throw(AlreadyLocked, "The mutex is already locked");
+                }
+            }
         }
 
         /// \brief Destructor.