std::shared_lock

From cppreference.com
< cpplrm; | thread
Thread support library
Threads
(C++11)
this_thread namespace
(C++11)
(C++11)
(C++11)
Mutual exclusion
(C++11)
Generic lock management
(C++11)
shared_lock
(C++14)
(C++11)
(C++11)
(C++11)(C++11)(C++11)
(C++11)
(C++11)
Condition variables
(C++11)
Futures
(C++11)
(C++11)
(C++11)
(C++11)
Defined in header <shared_mutex>
template< class Mutex >
class shared_lock;
(since C++14)

The class shared_lock is a general-purpose shared mutex ownership wrapper allowing deferred locking, timed locking and transfer of lock ownership. Locking a shared_lock locks the associated shared mutex in shared mode (to lock it in exclusive mode, std::unique_lock can be used)

The shared_lock class is movable, but not copyable -- it meets the requirements of MoveConstructible and MoveAssignable but not of CopyConstructible or CopyAssignable.

In order to wait in a shared mutex in shared ownership mode, std::condition_variable_any can be used (std::condition_variable requires std::unique_lock and so can only wait in unique ownership mode)

Template parameters

Mutex - the type of the shared mutex to lock. The type must meet the SharedMutex requirements

Member types

Type Definition
mutex_type Mutex

Member functions

constructs a shared_lock, optionally locking the supplied mutex
(public member function)
unlocks the associated mutex
(public member function)
unlocks the mutex, if owned, and acquires ownership of another
(public member function)
Shared locking
locks the associated mutex
(public member function)
tries to lock the associated mutex
(public member function)
tries to lock the associated mutex, for the specified duration
(public member function)
tries to lock the associated mutex, until a specified time point
(public member function)
unlocks the associated mutex
(public member function)
Modifiers
swaps the data members with another shared_lock
(public member function)
disassociates the mutex without unlocking
(public member function)
Observers
returns a pointer to the associated mutex
(public member function)
tests whether the lock owns its associated mutex
(public member function)
tests whether the lock owns its associated mutex
(public member function)

Non-member functions

specialization of std::swap for shared_lock
(function template)

Defect reports

The following behavior-changing defect reports were applied retroactively to previously published C++ standards.

DR Applied to Behavior as published Correct behavior
LWG 2981 C++17 redundant deduction guide from shared_lock<Mutex> was provided removed