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