最終更新日時:
が更新

履歴 編集

guard - Auto-lock/unlock-er

はじめに

detail/guard.hppMutex のロックとアンロック操作にスコープ付きのアクセスを許すようにした 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

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 m で参照される mutex をロックする。
m.unlock() not used m で参照される 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 (c) 2000, 2001 Stephen Cleary (shammah@voyager.net)

This file can be redistributed and/or modified under the terms found in copyright

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.