Boost C++ Libraries

...one 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

Introduction

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.

Synopsis

namespace details {
namespace pool {

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

  public:
    explicit guard(Mutex & mtx);
    ~guard();
};

} // namespace pool
} // namespace details

Semantics

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

Example

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"

Dependencies

None.

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)