Mutexes
Concurrency
Collaboration diagram for Mutexes:

## Classes

struct | std::adopt_lock_t
struct | std::defer_lock_t
class | std::lock_guard< _Mutex >
class | std::mutex
struct | std::once_flag
class | std::recursive_mutex
struct | std::try_to_lock_t
class | std::unique_lock< _Mutex >

## Functions

template<typename _Callable >
void | std::__once_call_impl ()
void | std::__once_proxy (void)
template<typename _Lock >
unique_lock< _Lock > | std::__try_to_lock (_Lock &__l)
template<typename _Callable , typename... _Args>
void | std::call_once (once_flag &__once, _Callable &&__f, _Args &&... __args)
template<typename _L1 , typename _L2 , typename... _L3>
void | std::lock (_L1 &__l1, _L2 &__l2, _L3 &... __l3)
template<typename _Mutex >
void | std::swap (unique_lock< _Mutex > &__x, unique_lock< _Mutex > &__y) noexcept
template<typename _Lock1 , typename _Lock2 , typename... _Lock3>
int | std::try_lock (_Lock1 &__l1, _Lock2 &__l2, _Lock3 &... __l3)

## Variables

__thread void(* | std::__once_call )()
__thread void * | std::__once_callable
constexpr adopt_lock_t | std::adopt_lock
constexpr defer_lock_t | std::defer_lock
constexpr try_to_lock_t | std::try_to_lock
template<typename _Mutex >
void | std::swap (shared_lock< _Mutex > &__x, shared_lock< _Mutex > &__y) noexcept
#define | __cpp_lib_shared_timed_mutex

## Detailed Description

Classes for mutex support.

## Macro Definition Documentation

## __cpp_lib_shared_timed_mutex

#define __cpp_lib_shared_timed_mutex

Swap specialization for shared_lock.

Definition at line 55 of file shared_mutex.

## Function Documentation

## call_once()

template<typename _Callable , typename... _Args>

void std::call_once | ( | once_flag & | __once,
|  | _Callable && | __f,
|  | _Args &&... | __args
| ) |  |

call_once

Definition at line 723 of file mutex.

## lock()

template<typename _L1 , typename _L2 , typename... _L3>

void std::lock | ( | _L1 & | __l1,
|  | _L2 & | __l2,
|  | _L3 &... | __l3
| ) |  |

Generic lock.

Parameters

  __l1 | Meets Mutex requirements (try_lock() may throw).
  __l2 | Meets Mutex requirements (try_lock() may throw).
  __l3 | Meets Mutex requirements (try_lock() may throw).

Exceptions

  An | exception thrown by an argument's lock() or try_lock() member.

Postcondition
  All arguments are locked.

All arguments are locked via a sequence of calls to lock(), try_lock() and unlock(). If the call exits via an exception any locks that were obtained will be released.

Definition at line 659 of file mutex.

Referenced by std::dynamic_pointer_cast().

## swap() [1/2]

template<typename _Mutex >

void std::swap | ( | unique_lock< _Mutex > & | __x,
|  | unique_lock< _Mutex > & | __y
| ) |  |

inline noexcept

Swap overload for unique_lock objects.

Definition at line 581 of file mutex.

## swap() [2/2]

template<typename _Mutex >

void std::swap | ( | shared_lock< _Mutex > & | __x,
|  | shared_lock< _Mutex > & | __y
| ) |  |

noexcept

Swap specialization for shared_lock.

Definition at line 596 of file shared_mutex.

## try_lock()

template<typename _Lock1 , typename _Lock2 , typename... _Lock3>

int std::try_lock | ( | _Lock1 & | __l1,
|  | _Lock2 & | __l2,
|  | _Lock3 &... | __l3
| ) |  |

Generic try_lock.

Parameters

  __l1 | Meets Mutex requirements (try_lock() may throw).
  __l2 | Meets Mutex requirements (try_lock() may throw).
  __l3 | Meets Mutex requirements (try_lock() may throw).

Returns
  Returns -1 if all try_lock() calls return true. Otherwise returns a 0-based index corresponding to the argument that returned false.

Postcondition
  Either all arguments are locked, or none will be.

Sequentially calls try_lock() on each argument.

Definition at line 638 of file mutex.

## Variable Documentation

## adopt_lock

constexpr adopt_lock_t std::adopt_lock

Tag used to make a scoped lock take ownership of a locked mutex.

Definition at line 370 of file mutex.

## defer_lock

constexpr defer_lock_t std::defer_lock

Tag used to prevent a scoped lock from acquiring ownership of a mutex.

Definition at line 364 of file mutex.

## try_to_lock

constexpr try_to_lock_t std::try_to_lock

Tag used to prevent a scoped lock from blocking if a mutex is locked.

Definition at line 367 of file mutex.