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_mutexobject 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_mutexobject, 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