#include <SG_RWLock.h>
Public Member Functions | |
| SG_RWLock () | |
| void | enter_read () |
| void | leave_read () |
| void | enter_write () |
| void | leave_write () |
Static Public Member Functions | |
| static const char * | name () |
Private Attributes | |
| volatile int | readers |
| volatile int | writers |
| SystemLock | l |
Definition at line 9 of file SG_RWLock.h.
| SG_RWLock::SG_RWLock | ( | ) | [inline] |
| static const char* SG_RWLock::name | ( | ) | [inline, static] |
| void SG_RWLock::enter_read | ( | void | ) | [inline] |
Definition at line 17 of file SG_RWLock.h.
References atomic_inc(), readers, thread_yield(), and writers.
00018 { 00019 atomic_inc(&readers); 00020 00021 // Wait until all writers have left 00022 while(writers > 0) thread_yield(); 00023 }
| void SG_RWLock::leave_read | ( | void | ) | [inline] |
Definition at line 24 of file SG_RWLock.h.
References atomic_dec(), and readers.
00025 { 00026 atomic_dec(&readers); 00027 }
| void SG_RWLock::enter_write | ( | void | ) | [inline] |
Definition at line 28 of file SG_RWLock.h.
References atomic_dec(), atomic_inc(), l, SystemLock::lock(), readers, thread_yield(), and writers.
00029 { 00030 // Use a critsec for mutual exclusion between writers 00031 l.lock(); 00032 // We must now wait until all readers have left the lock 00033 atomic_inc(&writers); 00034 // -BUG writers++; // Assume there are no readers 00035 while (readers > 0) 00036 { 00037 // Readers in the lock 00038 // Decrement writers again to avoid deadlocking with readers that 00039 // are interrupted immediately after incrementing readers 00040 atomic_dec(&writers); 00041 // - BUG writers--; 00042 thread_yield(); 00043 atomic_inc(&writers); 00044 // --BUG writers++; // Try again 00045 } 00046 }
| void SG_RWLock::leave_write | ( | void | ) | [inline] |
Definition at line 47 of file SG_RWLock.h.
References atomic_dec(), l, SystemLock::unlock(), and writers.
00048 { 00049 atomic_dec(&writers); 00050 l.unlock(); 00051 }
volatile int SG_RWLock::readers [private] |
Definition at line 53 of file SG_RWLock.h.
Referenced by enter_read(), enter_write(), leave_read(), and SG_RWLock().
volatile int SG_RWLock::writers [private] |
Definition at line 54 of file SG_RWLock.h.
Referenced by enter_read(), enter_write(), leave_write(), and SG_RWLock().
SystemLock SG_RWLock::l [private] |
1.5.5