Standard library header <shared_mutex> (C++14)
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)
Standard library headers 
 
 
 
 
 
 
 
 
 
 <compare> (C++20)
 <contracts> (C++26)
 <coroutine> (C++20)
 <cstdint> (C++11)
 <source_location> (C++20)
 <stdfloat> (C++23)
 <version> (C++20)
 <concepts> (C++20)
 <debugging> (C++26)
 <stacktrace> (C++23)
 <system_error> (C++11)
 <memory_resource> (C++17)
 <scoped_allocator> (C++11)
 <type_traits> (C++11)
 <ratio> (C++11)
 <any> (C++17)
 <bit> (C++20)
 <charconv> (C++17)
 <expected> (C++23)
 <format> (C++20)
 <optional> (C++17)
 <stdbit.h> (C++26)
 <tuple> (C++11)
 <typeindex> (C++11)
 <variant> (C++17)
 <array> (C++11)
 <flat_map> (C++23)
 <flat_set> (C++23)
 <forward_list> (C++11)
 <hive> (C++26)
 <mdspan> (C++23)
 <span> (C++20)
 <unordered_map> (C++11)
 <unordered_set> (C++11)
 <generator> (C++23)
 <ranges> (C++20)
 <cuchar> (C++11)
 <string_view> (C++17)
 <codecvt> (C++11/17/26*)
 <regex> (C++11)
 <cfenv> (C++11)
 <linalg> (C++26)
 <numbers> (C++20)
 <random> (C++11)
 <simd> (C++26)
 <stdckdint.h> (C++26)
 <chrono> (C++11)
 <ccomplex> (C++11/17/20*)
 <ciso646> (until C++20)
 <cstdalign> (C++11/17/20*)
 <cstdbool> (C++11/17/20*)
 <ctgmath> (C++11/17/20*)
 <cinttypes> (C++11)
 <filesystem> (C++17)
 <print> (C++23)
 <spanstream> (C++23)
 <strstream> (C++98/26*)
 <syncstream> (C++20)
 <atomic> (C++11)
 <barrier> (C++20)
 <condition_variable> (C++11)
 <future> (C++11)
 <hazard_pointer> (C++26)
 <latch> (C++20)
 <mutex> (C++11)
 <rcu> (C++26)
 <semaphore> (C++20)
 <shared_mutex> (C++14)
 <stdatomic.h> (C++23)
 <stop_token> (C++20)
 <thread> (C++11)
 <execution> (C++17)
This header is part of the thread support library.
Contents
Classes
(C++14)
(class) [edit]
Functions
[edit] Synopsis
namespace std { class shared_mutex; class shared_timed_mutex; template<class Mutex> class shared_lock; template<class Mutex> void swap(shared_lock<Mutex>& x, shared_lock<Mutex>& y) noexcept; }
[edit]
namespace std { class shared_mutex { public: shared_mutex(); ~shared_mutex(); shared_mutex(const shared_mutex&) = delete; shared_mutex& operator=(const shared_mutex&) = delete; // exclusive ownership void lock(); // blocking bool try_lock(); void unlock(); // shared ownership void lock_shared(); // blocking bool try_lock_shared(); void unlock_shared(); using native_handle_type = /* implementation-defined */; native_handle_type native_handle(); }; }
[edit]
namespace std { class shared_timed_mutex { public: shared_timed_mutex(); ~shared_timed_mutex(); shared_timed_mutex(const shared_timed_mutex&) = delete; shared_timed_mutex& operator=(const shared_timed_mutex&) = delete; // exclusive ownership void lock(); // blocking bool try_lock(); template<class Rep, class Period> bool try_lock_for(const chrono::duration<Rep, Period>& rel_time); template<class Clock, class Duration> bool try_lock_until(const chrono::time_point<Clock, Duration>& abs_time); void unlock(); // shared ownership void lock_shared(); // blocking bool try_lock_shared(); template<class Rep, class Period> bool try_lock_shared_for(const chrono::duration<Rep, Period>& rel_time); template<class Clock, class Duration> bool try_lock_shared_until(const chrono::time_point<Clock, Duration>& abs_time); void unlock_shared(); }; }
[edit]
namespace std { template<class Mutex> class shared_lock { public: using mutex_type = Mutex; // construct/copy/destroy shared_lock() noexcept; explicit shared_lock(mutex_type& m); // blocking shared_lock(mutex_type& m, defer_lock_t) noexcept; shared_lock(mutex_type& m, try_to_lock_t); shared_lock(mutex_type& m, adopt_lock_t); template<class Clock, class Duration> shared_lock(mutex_type& m, const chrono::time_point<Clock, Duration>& abs_time); template<class Rep, class Period> shared_lock(mutex_type& m, const chrono::duration<Rep, Period>& rel_time); ~shared_lock(); shared_lock(const shared_lock&) = delete; shared_lock& operator=(const shared_lock&) = delete; shared_lock(shared_lock&& u) noexcept; shared_lock& operator=(shared_lock&& u) noexcept; // locking void lock(); // blocking bool try_lock(); template<class Rep, class Period> bool try_lock_for(const chrono::duration<Rep, Period>& rel_time); template<class Clock, class Duration> bool try_lock_until(const chrono::time_point<Clock, Duration>& abs_time); void unlock(); // modifiers void swap(shared_lock& u) noexcept; mutex_type* release() noexcept; // observers bool owns_lock() const noexcept; explicit operator bool () const noexcept; mutex_type* mutex() const noexcept; private: mutex_type* pm; // exposition only bool owns; // exposition only }; template<class Mutex> void swap(shared_lock<Mutex>& x, shared_lock<Mutex>& y) noexcept; }