yohhoyの日記

技術的メモをしていきたい日記

recursive_(timed_)mutexの再帰ロック数上限

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 calling lock() or try_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 a recursive_mutex object, additional calls to try_lock() shall fail, and additional calls to lock() shall throw an exception of type system_error. A thread shall call unlock() once for each level of ownership acquired by calls to lock() and try_lock(). Only when all levels of ownership have been released may ownership be acquired by another thread.

関連URL