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