NonblockingRWLock Class Reference

#include <rwlock.h>

List of all members.

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


Detailed Description

Definition at line 25 of file rwlock.h.


Constructor & Destructor Documentation

NonblockingRWLock::NonblockingRWLock (  )  [inline]

Definition at line 29 of file rwlock.h.

00029 : readers(0), writers(0) {}

virtual NonblockingRWLock::~NonblockingRWLock (  )  [inline, virtual]

Definition at line 30 of file rwlock.h.

00030 {}


Member Function Documentation

static const char* NonblockingRWLock::name (  )  [inline, static]

Definition at line 28 of file rwlock.h.

00028 { return "Nonblocking_Reader_Lock"; }

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         }


Member Data Documentation

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().

Definition at line 76 of file rwlock.h.

Referenced by enter_read(), enter_write(), and leave_write().


The documentation for this class was generated from the following file:

Generated on Wed Mar 19 14:59:59 2008 for rwlock by  doxygen 1.5.5