@@ -26,8 +26,10 @@ RWMutexImpl::~RWMutexImpl() = default;
26
26
27
27
bool RWMutexImpl::lock_shared () { return true ; }
28
28
bool RWMutexImpl::unlock_shared () { return true ; }
29
+ bool RWMutexImpl::try_lock_shared () { return true ; }
29
30
bool RWMutexImpl::lock () { return true ; }
30
31
bool RWMutexImpl::unlock () { return true ; }
32
+ bool RWMutexImpl::try_lock () { return true ; }
31
33
32
34
#else
33
35
@@ -87,6 +89,14 @@ RWMutexImpl::unlock_shared()
87
89
return errorcode == 0 ;
88
90
}
89
91
92
+ bool RWMutexImpl::try_lock_shared () {
93
+ pthread_rwlock_t *rwlock = static_cast <pthread_rwlock_t *>(data_);
94
+ assert (rwlock != nullptr );
95
+
96
+ int errorcode = pthread_rwlock_tryrdlock (rwlock);
97
+ return errorcode == 0 ;
98
+ }
99
+
90
100
bool
91
101
RWMutexImpl::lock ()
92
102
{
@@ -107,6 +117,14 @@ RWMutexImpl::unlock()
107
117
return errorcode == 0 ;
108
118
}
109
119
120
+ bool RWMutexImpl::try_lock () {
121
+ pthread_rwlock_t *rwlock = static_cast <pthread_rwlock_t *>(data_);
122
+ assert (rwlock != nullptr );
123
+
124
+ int errorcode = pthread_rwlock_trywrlock (rwlock);
125
+ return errorcode == 0 ;
126
+ }
127
+
110
128
#else
111
129
112
130
RWMutexImpl::RWMutexImpl () : data_(new MutexImpl(false )) { }
@@ -123,6 +141,10 @@ bool RWMutexImpl::unlock_shared() {
123
141
return static_cast <MutexImpl *>(data_)->release ();
124
142
}
125
143
144
+ bool RWMutexImpl::try_lock_shared () {
145
+ return static_cast <MutexImpl *>(data_)->tryacquire ();
146
+ }
147
+
126
148
bool RWMutexImpl::lock () {
127
149
return static_cast <MutexImpl *>(data_)->acquire ();
128
150
}
@@ -131,6 +153,10 @@ bool RWMutexImpl::unlock() {
131
153
return static_cast <MutexImpl *>(data_)->release ();
132
154
}
133
155
156
+ bool RWMutexImpl::try_lock () {
157
+ return static_cast <MutexImpl *>(data_)->tryacquire ();
158
+ }
159
+
134
160
#endif
135
161
#endif
136
162
#endif
0 commit comments