...one of the most highly
regarded and expertly designed C++ library projects in the
world.
— Herb Sutter and Andrei
Alexandrescu, C++
Coding Standards
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 { private: guard(const guard &); void operator=(const guard &); public: explicit guard(Mutex & mtx); ~guard(); }; } // namespace pool } // namespace details
Symbol | Meaning |
---|---|
T | guard<Mutex> |
m | value of type Mutex & |
g | value of type guard<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 |
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"
None.
This header will eventually be replaced by a Boost multithreading library.
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)