C++ Boost

guard - Auto-lock/unlock-er

はじめに

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 Table
SymbolMeaning
Tguard<Mutex>
mvalue of type Mutex &
gvalue of type guard<Mutex>

Requirements on Mutex
ExpressionReturn TypeAssertion/Note/Pre/Post-Condition
m.lock()not usedm で参照される mutex をロックする。
m.unlock()not usedm で参照される mutex をアンロックする。

Requirements satisfied by guard
アサーション/注意事項/事前/事後条件
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.