30 #ifndef _GLIBCXX_MUTEX_H 31 #define _GLIBCXX_MUTEX_H 1 33 #pragma GCC system_header 35 #if __cplusplus < 201103L 41 #include <bits/gthr.h> 43 namespace std _GLIBCXX_VISIBILITY(default)
45 _GLIBCXX_BEGIN_NAMESPACE_VERSION
55 #ifdef _GLIBCXX_HAS_GTHREADS 60 typedef __gthread_mutex_t __native_type;
62 #ifdef __GTHREAD_MUTEX_INIT 63 __native_type _M_mutex = __GTHREAD_MUTEX_INIT;
65 constexpr __mutex_base() noexcept = default;
67 __native_type _M_mutex;
69 __mutex_base() noexcept
72 __GTHREAD_MUTEX_INIT_FUNCTION(&_M_mutex);
75 ~__mutex_base() noexcept { __gthread_mutex_destroy(&_M_mutex); }
78 __mutex_base(
const __mutex_base&) =
delete;
79 __mutex_base& operator=(
const __mutex_base&) =
delete;
83 class mutex :
private __mutex_base
86 typedef __native_type* native_handle_type;
88 #ifdef __GTHREAD_MUTEX_INIT 91 mutex() noexcept =
default;
100 int __e = __gthread_mutex_lock(&_M_mutex);
104 __throw_system_error(__e);
111 return !__gthread_mutex_trylock(&_M_mutex);
118 __gthread_mutex_unlock(&_M_mutex);
122 native_handle() noexcept
123 {
return &_M_mutex; }
126 #endif // _GLIBCXX_HAS_GTHREADS 152 template<
typename _Mutex>
156 typedef _Mutex mutex_type;
158 explicit lock_guard(mutex_type& __m) : _M_device(__m)
159 { _M_device.lock(); }
165 { _M_device.unlock(); }
171 mutex_type& _M_device;
175 _GLIBCXX_END_NAMESPACE_VERSION
178 #endif // _GLIBCXX_MUTEX_H ISO C++ entities toplevel namespace is std.
Try to acquire ownership of the mutex without blocking.
Do not acquire ownership of the mutex.
A simple scoped lock type.
_GLIBCXX17_INLINE constexpr defer_lock_t defer_lock
Tag used to prevent a scoped lock from acquiring ownership of a mutex.
Assume the calling thread has already obtained mutex ownership and manage it.
_GLIBCXX17_INLINE constexpr adopt_lock_t adopt_lock
Tag used to make a scoped lock take ownership of a locked mutex.
_GLIBCXX17_INLINE constexpr try_to_lock_t try_to_lock
Tag used to prevent a scoped lock from blocking if a mutex is locked.