If the recursive_timed_mutex isn't currently locked by any thread, the calling thread locks it (from this point, and until its member unlock is called, the thread owns the mutex).

If the recursive_timed_mutex is currently locked by another thread, execution of the calling thread is blocked until completely unlocked by the other thread (other non-locked threads continue their execution).

All lock and unlock operations on the recursive_timed_mutex follow a single total order, with all visible effects synchronized between the lock operations and previous unlock operations on the same object.

Note that the order in which different concurrent locks are scheduled to return is unspecified, and not necessarily related to the order in which they are locked (depending on the system and library implementation).

Parameters

none

Return value

none

Data races

Exception safety

Basic guarantee: if an exception is thrown by this member function, the recursive_timed_mutex object is left in a valid state. Further, a lock is never acquired by the thread that made the throwing call.