detail/guard.hpp は Mutex のロックとアンロック操作にスコープ付きのアクセスを許すようにした guard<Mutex> を提供する。 それは、例外が投げられたときでも、Mutex を確実にアンロックする。
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 | m で参照される mutex をロックする。 |
m.unlock() | not used | m で参照される mutex をアンロックする。 |
式 | アサーション/注意事項/事前/事後条件 |
---|---|
T(m) | m で参照される mutex をロックする。T(m) を m に束縛する。 |
(&g)->~T() | g が束縛されている mutex をアンロックする。 |
(プラットフォーム依存の) mutex があり、以下のようにそれをコードで包むことができる。
extern mutex global_lock; static void f() { boost::details::pool::guard<mutex> g(global_lock); // g のコンストラクタは "global_lock" をロックする ... // 何をしてもよい: // 例外を投げるもよし // return するもよし // そのまま抜けてもよし } // g のデストラクタが "global_lock"をアンロックする
なし。
このヘッダーはいつかは Boost multithreading library で置き換えられるであろう。
Copyright © 2000, 2001 Stephen Cleary (shammah@voyager.net)
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.