ClassicRWLock Class Reference

#include <classic_rwlock.h>

List of all members.

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


Detailed Description

Definition at line 139 of file classic_rwlock.h.


Constructor & Destructor Documentation

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]

Definition at line 158 of file classic_rwlock.h.

References lock, rcond, and wcond.

00159         {
00160         pthread_mutex_destroy(&lock);
00161         pthread_cond_destroy(&wcond);
00162         pthread_cond_destroy(&rcond);
00163         }


Member Function Documentation

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]

Definition at line 203 of file classic_rwlock.h.

00203 { return "ClassicRWLock"; }


Member Data Documentation

pthread_mutex_t ClassicRWLock::lock [private]

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().

Definition at line 145 of file classic_rwlock.h.

Referenced by ClassicRWLock(), enter_read(), enter_write(), leave_read(), and leave_write().

Definition at line 148 of file classic_rwlock.h.

Referenced by ClassicRWLock(), enter_write(), 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