SharedCounterRWLock Class Reference

#include <evg_rwlock.h>

List of all members.

Public Member Functions

 SharedCounterRWLock ()
void enter_read (void)
void leave_read (void)
void enter_write (void)
void leave_write (void)

Static Public Member Functions

static const char * name ()

Private Member Functions

void yield ()

Private Attributes

volatile int rwdata


Detailed Description

Definition at line 25 of file evg_rwlock.h.


Constructor & Destructor Documentation

SharedCounterRWLock::SharedCounterRWLock (  )  [inline]

Definition at line 40 of file evg_rwlock.h.

00040 : rwdata(0L) {}


Member Function Documentation

void SharedCounterRWLock::yield (  )  [inline, private]

Definition at line 32 of file evg_rwlock.h.

References thread_yield().

Referenced by enter_read(), and enter_write().

00033         {
00034                 thread_yield();
00035         }

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

Definition at line 38 of file evg_rwlock.h.

00038 { return "Shared_Counter_Lock"; }

void SharedCounterRWLock::enter_read ( void   )  [inline]

Definition at line 44 of file evg_rwlock.h.

References atomic_dec_return(), atomic_inc_return(), rwdata, and yield().

00045         {
00046                 if(atomic_inc_return(&rwdata) & 0x80000000)
00047                         for(;;)
00048                         {
00049                                 if(atomic_dec_return(&rwdata) & 0x80000000) yield();
00050                                 if((atomic_inc_return(&rwdata) & 0x80000000)==0) break;
00051                         }
00052         }

void SharedCounterRWLock::leave_read ( void   )  [inline]

Definition at line 57 of file evg_rwlock.h.

References atomic_dec(), and rwdata.

00058         {
00059                 atomic_dec(&rwdata);
00060         }

void SharedCounterRWLock::enter_write ( void   )  [inline]

Definition at line 65 of file evg_rwlock.h.

References atomic_cmpexch_return(), rwdata, and yield().

00066         {
00067                 for(;;)
00068                 {
00069                         if(atomic_cmpexch_return(&rwdata, 0x80000000, 0) == 0) break;
00070                         if(rwdata) yield();
00071                 }
00072         }

void SharedCounterRWLock::leave_write ( void   )  [inline]

Definition at line 77 of file evg_rwlock.h.

References atomic_and(), and rwdata.

00078         {
00079                 atomic_and(&rwdata, ~0x80000000);
00080 //              atomic_add(&rwdata, 0x80000000);
00081         }


Member Data Documentation

volatile int SharedCounterRWLock::rwdata [private]

Definition at line 27 of file evg_rwlock.h.

Referenced by enter_read(), enter_write(), leave_read(), 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