The scoped locking pattern. More...
#include <spin_rw_mutex.h>
 
  
 | Public Member Functions | |
| scoped_lock () | |
| Construct lock that has not acquired a mutex.  More... | |
| scoped_lock (spin_rw_mutex &m, bool write=true) | |
| Acquire lock on given mutex. | |
| ~scoped_lock () | |
| Release lock (if lock is held). | |
| void | acquire (spin_rw_mutex &m, bool write=true) | 
| Acquire lock on given mutex. | |
| bool | upgrade_to_writer () | 
| Upgrade reader to become a writer.  More... | |
| void | release () | 
| Release lock. | |
| bool | downgrade_to_reader () | 
| Downgrade writer to become a reader. | |
| bool | try_acquire (spin_rw_mutex &m, bool write=true) | 
| Try acquire lock on given mutex. | |
| spin_rw_mutex * | __internal_get_mutex () | 
| void | __internal_set_mutex (spin_rw_mutex *m) | 
| void | __internal_set_writer (bool flag=true) | 
| Protected Attributes | |
| spin_rw_mutex * | mutex | 
| The pointer to the current mutex that is held, or NULL if no mutex is held. | |
| bool | is_writer | 
| If mutex!=NULL, then is_writer is true if holding a writer lock, false if holding a reader lock.  More... | |
The scoped locking pattern.
It helps to avoid the common problem of forgetting to release lock. It also nicely provides the "node" for queuing locks.
| 
 | inline | 
Construct lock that has not acquired a mutex.
Equivalent to zero-initialization of *this.
| 
 | inline | 
Upgrade reader to become a writer.
Returns whether the upgrade happened without releasing and re-acquiring the lock
References is_writer.
| 
 | protected | 
If mutex!=NULL, then is_writer is true if holding a writer lock, false if holding a reader lock.
Not defined if not holding a lock.
Referenced by acquire(), downgrade_to_reader(), release(), try_acquire(), and upgrade_to_writer().