Mutex
The Mutex
concept extends the Lockable
concept to include inter-thread synchronization.
Requirements
Lockable
DefaultConstructible
Destructible
- not copyable
- not movable
For object m
of Mutex
type.
- The expression
m.lock()
has the following properties - Behaves as an atomic operation.
- Blocks the calling thread until exclusive ownership of the mutex can be obtained.
- Prior
m.unlock()
operations on the same mutex synchronize-with this lock operation (equivalent to release-acquirestd::memory_order
) - The behavior is undefined if the calling thread already owns the mutex (except if m is
std::recursive_mutex
orstd::recursive_timed_mutex
) - Exception of type
std::system_error
may be thrown on errors, with the following error codes:std::errc::operation_not_permitted
if the calling thread does not have required privilegesstd::errc::resource_deadlock_would_occur
if the implementation detects that this operation would lead to deadlock
std::errc::device_or_resource_busy if the mutex is already locked | (until C++17) |
---|
std::errc::device_or_resource_busy
if the mutex is already locked
(until C++17)
- The expression
m.try_lock()
has the following properties- Behaves as an atomic operation.
- Attempts to obtain exclusive ownership of the mutex for the calling thread without blocking. If ownership is not obtained, returns immediately. The function is allowed to spuriously fail and return even if the mutex is not currently owned by another thread.
- If
try_lock()
succeeds, priorunlock()
operations on the same object synchronize-with this operation (equivalent to release-acquirestd::memory_order
).lock()
does not synchronize with a failedtry_lock()
- Does not throw exceptions.
- The expression
m.unlock()
has the following properties- Behaves as an atomic operation.
- Releases the calling thread's ownership of the mutex and synchronizes-with the subsequent successful lock operations on the same object.
- The behavior is undefined if the calling thread does not own the mutex.
- Does not throw exceptions.
- All lock and unlock operations on a single mutex occur in a single total order that can be viewed as modification order of an atomic variable: the order is specific to this individual mutex.
Library types
The following standard library types satisfy Mutex
:
std::mutex
std::recursive_mutex
std::timed_mutex
std::recursive_timed_mutex
std::shared_mutex
See also
- Thread support library
Lockable
TimedMutex
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
本文档系腾讯云开发者社区成员共同维护,如有问题请联系 cloudcommunity@tencent.com