std::mutex - cppreference.com (original) (raw)

| | | | | ------------ | | ------------- | | class mutex; | | (since C++11) |

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

mutex offers exclusive, non-recursive ownership semantics:

The behavior of a program is undefined if a mutex is destroyed while still owned by any threads, or a thread terminates while owning a mutex. The mutex class satisfies all requirements of Mutex and StandardLayoutType.

std::mutex is neither copyable nor movable.

Contents

[edit] Nested types

Name Definition
native_handle_type (optional*) implementation-defined[edit]

[edit] Member functions

(constructor) constructs the mutex (public member function) [edit]
(destructor) destroys the mutex (public member function) [edit]
operator=[deleted] not copy-assignable (public member function) [edit]
Locking
lock locks the mutex, blocks if the mutex is not available (public member function) [edit]
try_lock tries to lock the mutex, returns if the mutex is not available (public member function) [edit]
unlock unlocks the mutex (public member function) [edit]
Native handle
native_handle returns the underlying implementation-defined native handle object (public member function) [edit]

[edit] Notes

std::mutex is usually not accessed directly: std::unique_lock, std::lock_guard, or std::scoped_lock(since C++17) manage locking in a more exception-safe manner.

[edit] Example

This example shows how a mutex can be used to protect an std::map shared between two threads.

Output:

http://bar => fake content http://foo => fake content

[edit] See also