SharedCounterRWLock2 Class Reference

#include <evg_rwlock_1.h>

List of all members.

Public Member Functions

 SharedCounterRWLock2 ()
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_1.h.


Constructor & Destructor Documentation

SharedCounterRWLock2::SharedCounterRWLock2 (  )  [inline]

Definition at line 40 of file evg_rwlock_1.h.

00040 : rwdata(0L) {}


Member Function Documentation

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

Definition at line 32 of file evg_rwlock_1.h.

References thread_yield().

Referenced by enter_read(), and enter_write().

00033         {
00034                 thread_yield();
00035         }

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

Definition at line 38 of file evg_rwlock_1.h.

00038 { return "Shared_Counter_Lock_2"; }

void SharedCounterRWLock2::enter_read ( void   )  [inline]

Definition at line 44 of file evg_rwlock_1.h.

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

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

void SharedCounterRWLock2::leave_read ( void   )  [inline]

Definition at line 57 of file evg_rwlock_1.h.

References atomic_dec(), and rwdata.

00058         {
00059                 atomic_dec(&rwdata);
00060         }

void SharedCounterRWLock2::enter_write ( void   )  [inline]

Definition at line 65 of file evg_rwlock_1.h.

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

00066         {
00067                 if(atomic_add_return(&rwdata, 0x00010000))
00068                         for(;;)
00069                         {
00070                                 if(atomic_add_return(&rwdata, -0x00010000)) yield();
00071                                 if(atomic_add_return(&rwdata, 0x00010000)==0) break;
00072                         }
00073         }

void SharedCounterRWLock2::leave_write ( void   )  [inline]

Definition at line 78 of file evg_rwlock_1.h.

References atomic_add(), and rwdata.

00079         {
00080                 atomic_add(&rwdata, -0x00010000);
00081         }


Member Data Documentation

volatile int SharedCounterRWLock2::rwdata [private]

Definition at line 27 of file evg_rwlock_1.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