std::mutex
From cppreference.com
C++
Feature test macros (C++20)
Concepts library (C++20)
Metaprogramming library (C++11)
Ranges library (C++20)
Filesystem library (C++17)
Concurrency support library (C++11)
Execution control library (C++26)
Concurrency support library
(C++11)
(C++20)
(C++11)
(C++11)
(C++20)
(C++26)
(C++26)
(C++20)
(C++26)
(C++20)
(C++26)
(C++26)
(C++26)
(C++26)
(C++26)
(C++26)
(C++11)
(C++11)
(C++17)
(C++11)
(C++14)
(C++11)
(C++11)
(C++11)
(C++11)(C++11)(C++11)(C++11)(C++11)(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++20)(C++20)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++26)
(C++26)
(C++26)
(C++11)
(C++20)
(C++11)
(C++11)(deprecated in C++20)
(C++11)(deprecated in C++20)
(C++11)
(C++11)
(C++11)(deprecated in C++26)
(C++11)
(C++11)
(C++11)(C++11)
(C++11)(C++11)
(C++11)(C++11)
(C++11)(C++11)
(C++11)(C++11)
(C++11)(C++11)
(C++11)(C++11)
(C++11)(C++11)
(C++26)(C++26)
(C++26)(C++26)
(C++11)
(C++20)(C++20)
(C++20)
(C++20)
(C++11)(C++11)
(C++11)(C++11)
(C++20)(C++20)
(C++20)(C++20)
(C++20)
(C++20)
std::mutex
Member functions
Locking
Native handle
Defined in header
<mutex>
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:
- A calling thread owns a
mutex
from the time that it successfully calls eitherlock
ortry_lock
until it callsunlock
. - When a thread owns a
mutex
, all other threads will block (for calls tolock
) or receive a false return value (fortry_lock
) if they attempt to claim ownership of themutex
. - A calling thread must not own the
mutex
prior to callinglock
ortry_lock
.
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
[edit] Member functions
Locking
Native handle
[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.
Run this code
#include <chrono> #include <iostream> #include <map> #include <mutex> #include <string> #include <thread> std::map <std::string, std::string > g_pages; std::mutex g_pages_mutex; void save_page(const std::string & url) { // simulate a long page fetch std::this_thread::sleep_for (std::chrono::seconds (2)); std::string result = "fake content"; std::lock_guard <std::mutex> guard(g_pages_mutex); g_pages[url] = result; } int main() { std::thread t1(save_page, "http://foo"); std::thread t2(save_page, "http://bar"); t1.join(); t2.join(); // safe to access g_pages without lock now, as the threads are joined for (const auto& [url, page] : g_pages) std::cout << url << " => " << page << '\n'; }
Output:
http://bar => fake content http://foo => fake content
[edit] See also
(C++11)
(class) [edit]