30 #ifndef _GLIBCXX_UNIQUE_LOCK_H
31 #define _GLIBCXX_UNIQUE_LOCK_H 1
33 #pragma GCC system_header
35 #if __cplusplus < 201103L
42 namespace 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;
222 explicit operator bool()
const noexcept
223 {
return owns_lock(); }
227 {
return _M_device; }
230 mutex_type* _M_device;
235 template<
typename _Mutex>
241 _GLIBCXX_END_NAMESPACE_VERSION
245 #endif // _GLIBCXX_UNIQUE_LOCK_H
Try to acquire ownership of the mutex without blocking.
Assume the calling thread has already obtained mutex ownership and manage it.
enable_if< ::__array_traits< _Tp, _Nm >::_Is_swappable::value >::type noexcept(noexcept(__one.swap(__two)))
swap
A movable scoped lock type.
constexpr _Tp * __addressof(_Tp &__r) noexcept
Same as C++11 std::addressof.
Do not acquire ownership of the mutex.