#include <classic_rwlock.h>
Public Member Functions | |
| ClassicRWLock () | |
| ~ClassicRWLock () | |
| void | enter_write (void) |
| void | leave_write (void) |
| void | enter_read (void) |
| void | leave_read (void) |
Static Public Member Functions | |
| static const char * | name () |
Private Attributes | |
| pthread_mutex_t | lock |
| pthread_cond_t | rcond |
| pthread_cond_t | wcond |
| int | lock_count |
| int | waiting_writers |
Definition at line 139 of file classic_rwlock.h.
| ClassicRWLock::ClassicRWLock | ( | ) | [inline] |
Definition at line 150 of file classic_rwlock.h.
References lock, lock_count, rcond, waiting_writers, and wcond.
00151 { 00152 pthread_mutex_init(&lock, NULL); 00153 pthread_cond_init(&wcond, NULL); 00154 pthread_cond_init(&rcond, NULL); 00155 lock_count = 0; 00156 waiting_writers = 0; 00157 }
| ClassicRWLock::~ClassicRWLock | ( | ) | [inline] |
| void ClassicRWLock::enter_write | ( | void | ) | [inline] |
Definition at line 165 of file classic_rwlock.h.
References lock, lock_count, waiting_writers, and wcond.
00166 { 00167 pthread_mutex_lock(&lock); 00168 waiting_writers++; 00169 while(lock_count) 00170 pthread_cond_wait(&wcond, &lock); 00171 waiting_writers--; 00172 lock_count = -1; 00173 pthread_mutex_unlock(&lock); 00174 }
| void ClassicRWLock::leave_write | ( | void | ) | [inline] |
Definition at line 175 of file classic_rwlock.h.
References lock, lock_count, rcond, waiting_writers, and wcond.
00176 { 00177 pthread_mutex_lock(&lock); 00178 lock_count = 0; 00179 if(waiting_writers == 0) 00180 pthread_cond_broadcast(&rcond); 00181 else 00182 pthread_cond_signal(&wcond); 00183 pthread_mutex_unlock(&lock); 00184 }
| void ClassicRWLock::enter_read | ( | void | ) | [inline] |
Definition at line 186 of file classic_rwlock.h.
References lock, lock_count, and rcond.
00187 { 00188 pthread_mutex_lock(&lock); 00189 while(lock_count < 0) 00190 pthread_cond_wait(&rcond, &lock); 00191 lock_count++; 00192 pthread_mutex_unlock(&lock); 00193 }
| void ClassicRWLock::leave_read | ( | void | ) | [inline] |
Definition at line 194 of file classic_rwlock.h.
References lock, lock_count, and wcond.
00195 { 00196 pthread_mutex_lock(&lock); 00197 lock_count--; 00198 if (!lock_count) 00199 pthread_cond_signal(&wcond); 00200 pthread_mutex_unlock(&lock); 00201 }
| static const char* ClassicRWLock::name | ( | ) | [inline, static] |
pthread_mutex_t ClassicRWLock::lock [private] |
Definition at line 142 of file classic_rwlock.h.
Referenced by ClassicRWLock(), enter_read(), enter_write(), leave_read(), leave_write(), and ~ClassicRWLock().
pthread_cond_t ClassicRWLock::rcond [private] |
Definition at line 143 of file classic_rwlock.h.
Referenced by ClassicRWLock(), enter_read(), leave_write(), and ~ClassicRWLock().
pthread_cond_t ClassicRWLock::wcond [private] |
Definition at line 144 of file classic_rwlock.h.
Referenced by ClassicRWLock(), enter_write(), leave_read(), leave_write(), and ~ClassicRWLock().
int ClassicRWLock::lock_count [private] |
Definition at line 145 of file classic_rwlock.h.
Referenced by ClassicRWLock(), enter_read(), enter_write(), leave_read(), and leave_write().
int ClassicRWLock::waiting_writers [private] |
Definition at line 148 of file classic_rwlock.h.
Referenced by ClassicRWLock(), enter_write(), and leave_write().
1.5.5