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; }
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
constexpr try_to_lock_t try_to_lock
Tag used to prevent a scoped lock from blocking if a mutex is locked.
constexpr adopt_lock_t adopt_lock
Tag used to make a scoped lock take ownership of a locked mutex.
constexpr defer_lock_t defer_lock
Tag used to prevent a scoped lock from acquiring ownership of a mutex.
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 simple scoped lock type.