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
Symbol Meaning
T guard<Mutex>
m value of type Mutex &
g value of type guard<Mutex>

Requirements on Mutex
Expression Return Type Assertion/Note/Pre/Post-Condition
m.lock() not used Locks the mutex referred to by m
m.unlock() not used Unlocks the mutex referred to by m

Requirements satisfied by guard
Expression Assertion/Note/Pre/Post-Condition
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.

Valid HTML 4.01 Transitional

Revised 05 December, 2006

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

Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)