1#ifndef THR_RWLOCK_INCLUDED
2#define THR_RWLOCK_INCLUDED
60 InitializeSRWLock(&rwp->srwlock);
61 rwp->have_exclusive_srwlock =
false;
65 return pthread_rwlock_init(rwp,
nullptr);
73 return pthread_rwlock_destroy(rwp);
79 AcquireSRWLockShared(&rwp->srwlock);
82 return pthread_rwlock_rdlock(rwp);
88 if (!TryAcquireSRWLockShared(&rwp->srwlock))
return EBUSY;
91 return pthread_rwlock_tryrdlock(rwp);
97 AcquireSRWLockExclusive(&rwp->srwlock);
98 rwp->have_exclusive_srwlock =
true;
101 return pthread_rwlock_wrlock(rwp);
107 if (!TryAcquireSRWLockExclusive(&rwp->srwlock))
return EBUSY;
108 rwp->have_exclusive_srwlock =
true;
111 return pthread_rwlock_trywrlock(rwp);
117 if (rwp->have_exclusive_srwlock) {
118 rwp->have_exclusive_srwlock =
false;
119 ReleaseSRWLockExclusive(&rwp->srwlock);
121 ReleaseSRWLockShared(&rwp->srwlock);
124 return pthread_rwlock_unlock(rwp);
135static inline void rw_pr_lock_assert_write_owner(
const rw_pr_lock_t *rwlock) {
140static inline void rw_pr_lock_assert_not_write_owner(
Some integer typedefs for easier portability.
Defines to make different thread packages compatible.
static my_thread_t my_thread_self()
Definition: my_thread.h:74
static int my_thread_equal(my_thread_t t1, my_thread_t t2)
Definition: my_thread.h:82
Portable implementation of special type of read-write locks.
Definition: thr_rwlock_bits.h:94
my_thread_t writer_thread
Thread holding wr-lock (for debug purposes only).
Definition: thr_rwlock_bits.h:112
bool active_writer
Indicates whether there is an active writer.
Definition: thr_rwlock_bits.h:110
MySQL condition variable implementation.
MySQL mutex implementation.
static int native_rw_init(native_rw_lock_t *rwp)
Definition: thr_rwlock.h:58
int rw_pr_wrlock(rw_pr_lock_t *)
Definition: thr_rwlock.cc:66
int rw_pr_destroy(rw_pr_lock_t *)
Definition: thr_rwlock.cc:47
static int native_rw_trywrlock(native_rw_lock_t *rwp)
Definition: thr_rwlock.h:105
int rw_pr_rdlock(rw_pr_lock_t *)
Definition: thr_rwlock.cc:53
static int native_rw_tryrdlock(native_rw_lock_t *rwp)
Definition: thr_rwlock.h:86
static int native_rw_destroy(native_rw_lock_t *rwp)
Definition: thr_rwlock.h:69
int rw_pr_unlock(rw_pr_lock_t *)
Definition: thr_rwlock.cc:99
static int native_rw_rdlock(native_rw_lock_t *rwp)
Definition: thr_rwlock.h:77
static int native_rw_unlock(native_rw_lock_t *rwp)
Definition: thr_rwlock.h:115
static int native_rw_wrlock(native_rw_lock_t *rwp)
Definition: thr_rwlock.h:95
int rw_pr_init(rw_pr_lock_t *)
Definition: thr_rwlock.cc:35
pthread_rwlock_t native_rw_lock_t
Definition: thr_rwlock_bits.h:60