# std::recursive_mutex

From cppreference.com
< cpp‎ | thread

Defined in header `<mutex>` |  |
class recursive_mutex; |  | (since C++11)

The `recursive_mutex` class is a synchronization primitive that can be used to protect shared data from being simultaneously accessed by multiple threads.

`recursive_mutex` offers exclusive, recursive ownership semantics:

- A calling thread owns a `recursive_mutex` for a period of time that starts when it successfully calls either `lock` or `try_lock`. During this period, the thread may make additional calls to `lock` or `try_lock`. The period of ownership ends when the thread makes a matching number of calls to `unlock`.
- When a thread owns a `recursive_mutex`, all other threads will block (for calls to `lock`) or receive a false return value (for `try_lock`) if they attempt to claim ownership of the `recursive_mutex`.
- The maximum number of times that a `recursive_mutex` may be locked is unspecified, but after that number is reached, calls to `lock` will throw std::system_error and calls to `try_lock` will return false.

The behavior of a program is undefined if a `recursive_mutex` is destroyed while still owned by some thread. The `recursive_mutex` class satisfies all requirements of Mutex and StandardLayoutType.

### Member types

Member type | Definition
`native_handle_type`(optional) | implementation-defined

### Member functions

(constructor) | constructs the mutex (public member function)
(destructor) | destroys the mutex (public member function)
operator= [deleted] | not copy-assignable (public member function)

##### Locking

lock | locks the mutex, blocks if the mutex is not available (public member function)
try_lock | tries to lock the mutex, returns if the mutex is not available (public member function)
unlock | unlocks the mutex (public member function)

##### Native handle

native_handle | returns the underlying implementation-defined native handle object (public member function)

Retrieved from "https://en.cppreference.com/mwiki/index.php?title=cpp/thread/recursive_mutex&oldid=103311"