The class recursive_timed_mutex provides a recursive mutex with exclusive
If one thread owns a recursive_timed_mutex object,
attempts by another thread to acquire ownership of that object will fail (for
try_lock()) or block (for lock(), try_lock_for(), and
try_lock_until()) until the owning thread has completely released
ownership or the call to try_lock_for() or try_lock_until()
times out (having failed to obtain ownership).
A thread that owns a recursive_timed_mutex object may acquire additional
levels of ownership by calling lock(), try_lock(),
try_lock_for(), or try_lock_until() on that object.
unspecified how many levels of ownership may be acquired by a single thread.
a thread has already acquired the maximum level of ownership for a
recursive_timed_mutex object, additional calls to try_lock(),
try_lock_for(), or try_lock_until() fail, and additional
calls to lock() throw an exception of type system_error.
thread shall call unlock() once for each level of ownership acquired by
calls to lock(), try_lock(), try_lock_for(), and
Only when all levels of ownership have been released
may ownership of the object be acquired by another thread.