C++11標準ライブラリのstd::recursive_mutex
, std::recursive_timed_mutex
クラスでは、同一スレッドからの再帰ロック獲得回数の上限は未規定(unspecified)となっている。一方で上限回数を超えるtry_lock
操作は失敗し、lock
操作は例外送出することは保証される。
C++11 30.4.1.2.2/p3より引用(下線部は強調)。recursive_timed_mutex
についても同様の定義(30.4.1.3.2/p3)。
A thread that owns a
recursive_mutex
object may acquire additional levels of ownership by callinglock()
ortry_lock()
on that object. It is unspecified how many levels of ownership may be acquired by a single thread. If a thread has already acquired the maximum level of ownership for arecursive_mutex
object, additional calls totry_lock()
shall fail, and additional calls tolock()
shall throw an exception of typesystem_error
. A thread shall callunlock()
once for each level of ownership acquired by calls tolock()
andtry_lock()
. Only when all levels of ownership have been released may ownership be acquired by another thread.
関連URL