#include <evg_rwlock_1.h>
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 |
Definition at line 25 of file evg_rwlock_1.h.
| SharedCounterRWLock2::SharedCounterRWLock2 | ( | ) | [inline] |
| 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] |
| 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 }
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().
1.5.5