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

| | | | | --------------------------- | | ------------- | | class shared_timed_mutex; | | (since C++14) |

The shared_timed_mutex class is a synchronization primitive that can be used to protect shared data from being simultaneously accessed by multiple threads. In contrast to other mutex types which facilitate exclusive access, a shared_timed_mutex has two levels of access:

Shared mutexes are usually used in situations when multiple readers can access the same resource at the same time without causing data races, but only one writer can do so.

In a manner similar to timed_mutex, shared_timed_mutex provides the ability to attempt to claim ownership of a shared_timed_mutex with a timeout via the try_lock_for(), try_lock_until(), try_lock_shared_for(), try_lock_shared_until() member functions.

The shared_timed_mutex class satisfies all requirements of SharedTimedMutex and StandardLayoutType.

Contents

[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]
Exclusive 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]
try_lock_for tries to lock the mutex, returns if the mutex has beenunavailable for the specified timeout duration (public member function) [edit]
try_lock_until tries to lock the mutex, returns if the mutex has beenunavailable until specified time point has been reached (public member function) [edit]
unlock unlocks the mutex (public member function) [edit]
Shared locking
lock_shared locks the mutex for shared ownership, blocks if the mutex is not available (public member function) [edit]
try_lock_shared tries to lock the mutex for shared ownership, returns if the mutex is not available (public member function) [edit]
try_lock_shared_for tries to lock the mutex for shared ownership, returns if the mutex has beenunavailable for the specified timeout duration (public member function) [edit]
try_lock_shared_until tries to lock the mutex for shared ownership, returns if the mutex has beenunavailable until specified time point has been reached (public member function) [edit]
unlock_shared unlocks the mutex (shared ownership) (public member function) [edit]

[edit] Notes

Feature-test macro Value Std Feature
__cpp_lib_shared_timed_mutex 201402L (C++14) std::shared_timed_mutex

[edit] Example

A copy assignment operator for a class that holds resources that can handle multiple readers, but only one writer.

#include #include   class R { mutable std::shared_timed_mutex mut; /* data */ public: R& operator=(const R& other) { // requires exclusive ownership to write to this std::unique_lockstd::shared_timed_mutex lhs(mut, std::defer_lock); // requires shared ownership to read from other std::shared_lockstd::shared_timed_mutex rhs(other.mut, std::defer_lock); std::lock(lhs, rhs); / assign data */ return *this; } };   int main() { R r; }