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 を併用することを推奨します.