17 #ifndef __TBB_queuing_rw_mutex_H
18 #define __TBB_queuing_rw_mutex_H
20 #define __TBB_queuing_rw_mutex_H_include_area
38 #if TBB_USE_THREADING_TOOLS
152 #undef __TBB_queuing_rw_mutex_H_include_area
#define __TBB_DEFINE_PROFILING_SET_NAME(sync_object_type)
#define __TBB_EXPORTED_METHOD
#define __TBB_ASSERT(predicate, comment)
No-op version of __TBB_ASSERT.
void poison_pointer(T *__TBB_atomic &)
Queuing reader-writer mutex with local-only spinning.
queuing_rw_mutex()
Construct unacquired mutex.
static const bool is_fair_mutex
static const bool is_rw_mutex
~queuing_rw_mutex()
Destructor asserts if the mutex is acquired, i.e. q_tail is non-NULL.
static const bool is_recursive_mutex
void __TBB_EXPORTED_METHOD internal_construct()
atomic< scoped_lock * > q_tail
The last competitor requesting the lock.
The scoped locking pattern.
void initialize()
Initialize fields to mean "no lock held".
scoped_lock()
Construct lock that has not acquired a mutex.
void acquire_internal_lock()
Acquire the internal lock.
bool try_acquire(queuing_rw_mutex &m, bool write=true)
Acquire lock on given mutex if free (i.e. non-blocking)
bool try_acquire_internal_lock()
Try to acquire the internal lock.
scoped_lock *__TBB_atomic *__TBB_atomic my_next
void release()
Release lock.
void wait_for_release_of_internal_lock()
Wait for internal lock to be released.
atomic< state_t > my_state
State of the request: reader, writer, active reader, other service states.
~scoped_lock()
Release lock (if lock is held).
unsigned char my_internal_lock
A tiny internal lock.
void acquire(queuing_rw_mutex &m, bool write=true)
Acquire lock on given mutex.
void unblock_or_wait_on_internal_lock(uintptr_t)
A helper function.
void release_internal_lock()
Release the internal lock.
unsigned char __TBB_atomic my_going
The local spin-wait variable.
bool upgrade_to_writer()
Upgrade reader to become a writer.
scoped_lock *__TBB_atomic my_prev
The pointer to the previous and next competitors for a mutex.
bool downgrade_to_reader()
Downgrade writer to become a reader.
scoped_lock(queuing_rw_mutex &m, bool write=true)
Acquire lock on given mutex.
queuing_rw_mutex * my_mutex
The pointer to the mutex owned, or NULL if not holding a mutex.
Base class for types that should not be copied or assigned.