#include <SimpleRWLock.h>
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 |
Definition at line 12 of file SimpleRWLock.h.
| 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 }
| static const char* SimpleRWLock::name | ( | ) | [inline, static] |
| 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] |
| 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 }
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.
1.5.5