30#ifndef _GLIBCXX_UNIQUE_LOCK_H
31#define _GLIBCXX_UNIQUE_LOCK_H 1
33#pragma GCC system_header
35#if __cplusplus < 201103L
42namespace std _GLIBCXX_VISIBILITY(default)
44_GLIBCXX_BEGIN_NAMESPACE_VERSION
58 template<
typename _Mutex>
62 typedef _Mutex mutex_type;
65 : _M_device(0), _M_owns(
false)
89 template<
typename _Clock,
typename _Duration>
93 _M_owns(_M_device->try_lock_until(__atime))
96 template<
typename _Rep,
typename _Period>
100 _M_owns(_M_device->try_lock_for(__rtime))
113 : _M_device(__u._M_device), _M_owns(__u._M_owns)
136 __throw_system_error(
int(errc::operation_not_permitted));
138 __throw_system_error(
int(errc::resource_deadlock_would_occur));
150 __throw_system_error(
int(errc::operation_not_permitted));
152 __throw_system_error(
int(errc::resource_deadlock_would_occur));
155 _M_owns = _M_device->try_lock();
160 template<
typename _Clock,
typename _Duration>
165 __throw_system_error(
int(errc::operation_not_permitted));
167 __throw_system_error(
int(errc::resource_deadlock_would_occur));
170 _M_owns = _M_device->try_lock_until(__atime);
175 template<
typename _Rep,
typename _Period>
180 __throw_system_error(
int(errc::operation_not_permitted));
182 __throw_system_error(
int(errc::resource_deadlock_would_occur));
185 _M_owns = _M_device->try_lock_for(__rtime);
194 __throw_system_error(
int(errc::operation_not_permitted));
205 std::swap(_M_device, __u._M_device);
206 std::swap(_M_owns, __u._M_owns);
212 mutex_type* __ret = _M_device;
219 owns_lock()
const noexcept
222 explicit operator bool()
const noexcept
223 {
return owns_lock(); }
226 mutex()
const noexcept
227 {
return _M_device; }
230 mutex_type* _M_device;
235 template<
typename _Mutex>
241_GLIBCXX_END_NAMESPACE_VERSION
constexpr _Tp * __addressof(_Tp &__r) noexcept
Same as C++11 std::addressof.
ISO C++ entities toplevel namespace is std.
Do not acquire ownership of the mutex.
Try to acquire ownership of the mutex without blocking.
Assume the calling thread has already obtained mutex ownership and manage it.
A movable scoped lock type.