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 - マルチプラットフォームなスレッドクラス