#include <rwlock.h>
Public Member Functions | |
NonblockingRWLock () | |
virtual | ~NonblockingRWLock () |
void | enter_read () |
void | leave_read () |
void | enter_write () |
void | leave_write () |
Static Public Member Functions | |
static const char * | name () |
Private Attributes | |
volatile int | readers |
volatile int | writers |
SystemLock | l |
Definition at line 25 of file rwlock.h.
NonblockingRWLock::NonblockingRWLock | ( | ) | [inline] |
virtual NonblockingRWLock::~NonblockingRWLock | ( | ) | [inline, virtual] |
static const char* NonblockingRWLock::name | ( | ) | [inline, static] |
void NonblockingRWLock::enter_read | ( | void | ) | [inline] |
Definition at line 34 of file rwlock.h.
References atomic_dec(), atomic_inc(), l, SystemLock::lock(), readers, SystemLock::unlock(), and writers.
00035 { 00036 atomic_inc(&readers); 00037 if(writers > 0) 00038 { 00039 atomic_dec(&readers); 00040 l.lock(); 00041 atomic_inc(&readers); 00042 l.unlock(); 00043 } 00044 }
void NonblockingRWLock::leave_read | ( | void | ) | [inline] |
Definition at line 49 of file rwlock.h.
References atomic_dec(), and readers.
00050 { 00051 atomic_dec(&readers); 00052 }
void NonblockingRWLock::enter_write | ( | void | ) | [inline] |
Definition at line 57 of file rwlock.h.
References atomic_inc(), l, SystemLock::lock(), readers, thread_yield(), and writers.
00058 { 00059 l.lock(); 00060 atomic_inc(&writers); 00061 while(readers) thread_yield(); 00062 }
void NonblockingRWLock::leave_write | ( | void | ) | [inline] |
Definition at line 67 of file rwlock.h.
References atomic_dec(), l, SystemLock::unlock(), and writers.
00068 { 00069 atomic_dec(&writers); 00070 l.unlock(); 00071 }
volatile int NonblockingRWLock::readers [private] |
Definition at line 74 of file rwlock.h.
Referenced by enter_read(), enter_write(), and leave_read().
volatile int NonblockingRWLock::writers [private] |
Definition at line 75 of file rwlock.h.
Referenced by enter_read(), enter_write(), and leave_write().
SystemLock NonblockingRWLock::l [private] |
Definition at line 76 of file rwlock.h.
Referenced by enter_read(), enter_write(), and leave_write().