CLX C++ Libraries - mutex
Author: clown

CLX C++ Libraries
Home >> mutex

# Declrations

    class mutex;
    class try_mutex;
    class recursive_mutex;
    class recursive_try_mutex;

    template <class Mutex>
    class unique_lock;

# Overview

mutex，try_mutex，recursive_mutex，recursive_try_mutex は， スレッド間での排他制御を行うためのクラスです．mutex，try_mutex は，一旦 lock するとどのスレッドが lock したかに関わらず，unlock しなければ再 lock を行うことができません．これに対して，recursive_mutex は，同じスレッドであるならば， lock した後さらに lock を行うことができます．ただし，N 回 lock した場合は， 必ず N 回 unlock を行う必要があります．

mutex，recursive_mutex は，lock が成功するまでブロックします．これに対して， try_mutex，recursive_try_mutex は，lock 可能かどうかを調べ，既に他のスレッドによって lock されている場合は，false を返します．

mutex，try_mutex，recursive_mutex，recursive_try_mutex は，scoped_lock と併用して使うことを推奨します．scoped_lock は，以下の例のように mutex を引数にしてオブジェクトを作成すると，コンストラクタで lock を行い，デストラクタで unlock を行います．これにより，そのスコープから抜けて，一時変数が開放された時に必ず unlock されるので，unlock のし忘れを防ぐことができます（ boost::thread を参照）．また，condition は， scoped_lock を引数として要求します．

    clx::mutex m;

    { // このスコープから抜けると同時にデストラクタが呼ばれ unlock される．
        clx::mutex::scoped_lock lock(m);
    }

# Example

thread の Example を参照して下さい（example_thread.cpp）．

# Related Types

## mutex

    typedef unique_guard<mutex> scoped_lock;
    typedef ... handle_pointer;

## try_mutex

    typedef unique_guard<try_mutex> scoped_lock;
    typedef ... handle_pointer;

## recursive_mutex

    typedef unique_guard<recursive_mutex> scoped_lock;
    typedef ... handle_pointer;

## recursive_try_mutex

    typedef unique_guard<recursive_try_mutex> scoped_lock;
    typedef ... handle_pointer;

# Construction and Member Functions

    mutex();
    virtual ~mutex();

    bool lock();
    void unlock();
    handle_pointer native_handle();

mutex，try_mutex，recursive_mutex，recursive_try_mutex のインターフェースは同じです． lock()/unlock() メソッドを持っていますが，通常は，直接呼ばずに scoped_lock を併用することを推奨します．

# Related Pages

1. CLX C++ Libraries - thread
2. CLX C++ Libraries - condition
3. CLX C++ Libraries - call_once

# Reference

1. Life like a clown - マルチプラットフォームなスレッドクラス