SimpleRWLock Class Reference

#include <SimpleRWLock.h>

List of all members.

Public Member Functions

 SimpleRWLock ()
void enter_read (void)
void enter_write (void)
void leave_read (void)
void leave_write (void)
 SimpleRWLock ()
void enter_read (void)
void enter_write (void)
void leave_read (void)
void leave_write (void)

Static Public Member Functions

static const char * name ()
static const char * name ()

Private Attributes

volatile int m_nReaders
volatile int m_nWriters
long m_nReaders
long m_nWriters


Detailed Description

Definition at line 12 of file SimpleRWLock.h.


Constructor & Destructor Documentation

SimpleRWLock::SimpleRWLock (  )  [inline]

Definition at line 18 of file SimpleRWLock.h.

References m_nReaders, and m_nWriters.

00019     {
00020         m_nReaders = 0;
00021         m_nWriters = 0;
00022     }

SimpleRWLock::SimpleRWLock (  )  [inline]

Definition at line 16 of file VladRWLock.h.

References m_nReaders, and m_nWriters.

00017     {
00018         m_nReaders = 0;
00019         m_nWriters = 0;
00020     }


Member Function Documentation

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

Definition at line 24 of file SimpleRWLock.h.

00024 { return "Simple_Lock"; }

void SimpleRWLock::enter_read ( void   )  [inline]

Definition at line 26 of file SimpleRWLock.h.

References atomic_dec(), atomic_inc(), m_nReaders, m_nWriters, and thread_yield().

00027     {
00028         for (;;)
00029         {
00030             atomic_inc(&m_nReaders);
00031             if (m_nWriters == 0) break;
00032             atomic_dec(&m_nReaders);
00033             thread_yield();
00034         }
00035     }

void SimpleRWLock::enter_write ( void   )  [inline]

Definition at line 37 of file SimpleRWLock.h.

References atomic_cmpexch_return(), m_nReaders, m_nWriters, and thread_yield().

00038     {
00039         for (;;)
00040         {
00041             if (atomic_cmpexch_return(&m_nWriters, 1, 0) == 0)
00042             {
00043                 while (m_nReaders != 0) thread_yield();
00044                 break;
00045             }
00046             thread_yield();
00047         }
00048     }

void SimpleRWLock::leave_read ( void   )  [inline]

Definition at line 50 of file SimpleRWLock.h.

References atomic_dec(), and m_nReaders.

00051     {
00052         atomic_dec(&m_nReaders);
00053     }

void SimpleRWLock::leave_write ( void   )  [inline]

Definition at line 55 of file SimpleRWLock.h.

References atomic_dec(), and m_nWriters.

00056     {
00057         atomic_dec(&m_nWriters);
00058     }

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

Definition at line 22 of file VladRWLock.h.

00022 { return "VladRWLock"; }

void SimpleRWLock::enter_read ( void   )  [inline]

Definition at line 24 of file VladRWLock.h.

References m_nReaders, and m_nWriters.

00025     {
00026         for (;;)
00027         {
00028             InterlockedIncrement (&m_nReaders);
00029             if (m_nWriters == 0) break;
00030             InterlockedDecrement (&m_nReaders);
00031             Sleep(0);
00032         }
00033     }

void SimpleRWLock::enter_write ( void   )  [inline]

Definition at line 35 of file VladRWLock.h.

References m_nReaders, and m_nWriters.

00036     {
00037         for (;;)
00038         {
00039             if (InterlockedCompareExchange (&m_nWriters, 1, 0) == 0)
00040             {
00041                 while (m_nReaders != 0) Sleep(0);
00042                 break;
00043             }
00044             Sleep(0);
00045         }
00046     }

void SimpleRWLock::leave_read ( void   )  [inline]

Definition at line 48 of file VladRWLock.h.

References m_nReaders.

00049     {
00050         InterlockedDecrement (&m_nReaders);
00051     }

void SimpleRWLock::leave_write ( void   )  [inline]

Definition at line 53 of file VladRWLock.h.

References m_nWriters.

00054     {
00055         InterlockedDecrement (&m_nWriters);
00056     }


Member Data Documentation

volatile int SimpleRWLock::m_nReaders [private]

Definition at line 14 of file SimpleRWLock.h.

Referenced by enter_read(), enter_write(), leave_read(), and SimpleRWLock().

volatile int SimpleRWLock::m_nWriters [private]

Definition at line 15 of file SimpleRWLock.h.

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

long SimpleRWLock::m_nReaders [private]

Definition at line 12 of file VladRWLock.h.

long SimpleRWLock::m_nWriters [private]

Definition at line 13 of file VladRWLock.h.


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

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