std::shared_lock

From cppreference.com
< cpp‎ | thread
 
 
Concurrency support library
Threads
(C++11)
(C++20)
this_thread namespace
(C++11)
(C++11)
(C++11)
Cooperative cancellation
Mutual exclusion
(C++11)
Generic lock management
(C++11)
(C++11)
shared_lock
(C++14)
(C++11)
(C++11)
(C++11)
Condition variables
(C++11)
Semaphores
Latches and Barriers
(C++20)
(C++20)
Futures
(C++11)
(C++11)
(C++11)
(C++11)
Safe Reclamation
(C++26)
Hazard Pointers
Atomic types
(C++11)
(C++20)
Initialization of atomic types
(C++11)(deprecated in C++20)
(C++11)(deprecated in C++20)
Memory ordering
Free functions for atomic operations
Free functions for atomic flags
 
 
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.

shared_lock meets the Lockable requirements. If Mutex meets the SharedTimedLockable requirements, shared_lock also meets TimedLockable requirements.

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 SharedLockable 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

specializes the std::swap algorithm
(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