In this description, m denotes an object of a mutex type,
rel_time denotes an object of an
instantiation of duration, and abs_time denotes an
object of an
instantiation of time_point.
Effects: The function attempts to obtain ownership of the mutex within the
relative timeout ([thread.req.timing])
specified by rel_time.
If the time specified by rel_time is less than or
equal to rel_time.zero(), the function attempts to obtain ownership without blocking (as if by calling
try_lock()).
The function returns within the timeout specified by
rel_time only if it has obtained ownership of the mutex object.
As
with try_lock(), there is no guarantee that ownership will be obtained if the
lock is available, but implementations are expected to make a strong effort to do so.
As with try_lock(), there is no guarantee that ownership will
be obtained if the lock is available, but implementations are expected to make a
strong effort to do so.
The class timed_mutex provides a non-recursive mutex with exclusive ownership
semantics.
If one thread owns a 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 released ownership with a call to unlock() or the
call to try_lock_for() or try_lock_until() times out (having
failed to obtain ownership).
The class recursive_timed_mutex provides a recursive mutex with exclusive
ownership semantics.
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.
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_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.
A
thread shall call unlock() once for each level of ownership acquired by
calls to lock(), try_lock(), try_lock_for(), and
try_lock_until().
Only when all levels of ownership have been released
may ownership of the object be acquired by another thread.