Boost C++ Libraries of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

This is an old version of boost. Click here for the latest version's documentation home page.
C++ Boost

guard - Auto-lock/unlock-er


detail/guard.hpp provides a type guard<Mutex> that allows scoped access to the Mutex's locking and unlocking operations. It is used to ensure that a Mutex is unlocked, even if an exception is thrown.


namespace details {
namespace pool {

template <typename Mutex>
class guard
    guard(const guard &);
    void operator=(const guard &);

    explicit guard(Mutex & mtx);

} // namespace pool
} // namespace details


Symbol Table
mvalue of type Mutex &
gvalue of type guard<Mutex>

Requirements on Mutex
ExpressionReturn TypeAssertion/Note/Pre/Post-Condition
m.lock()not usedLocks the mutex referred to by m
m.unlock()not usedUnlocks the mutex referred to by m

Requirements satisfied by guard
T(m)Locks the mutex referred to by m; binds T(m) to m
(&g)->~T()Unlocks the mutex that g is bound to


Given a (platform-specific) mutex class, we can wrap code as follows:

extern mutex global_lock;

static void f()
  boost::details::pool::guard<mutex> g(global_lock);
  // g's constructor locks "global_lock"

  ... // do anything:
      //   throw exceptions
      //   return
      //   or just fall through
} // g's destructor unlocks "global_lock"



Future Directions

This header will eventually be replaced by a Boost multithreading library.

Copyright © 2000, 2001 Stephen Cleary (scleary AT jerviswebb DOT com)

This file can be redistributed and/or modified under the terms found in copyright.html

This software and its documentation is provided "as is" without express or implied warranty, and with no claim as to its suitability for any purpose.