cmn_oneWRmanyRD Class Reference
[Common, basic classes, functions and types]

#include <thread.h>

Collaboration diagram for cmn_oneWRmanyRD:

Collaboration graph
[legend]

List of all members.


Detailed Description

Definition at line 359 of file thread.h.


Public Member Functions

 cmn_oneWRmanyRD ()
void WantWrite ()
 before write ask for permittion, if someone already set wantWrite then return false othervice wait for readers to complete and return true
void WantRead ()
 wait for writer to finish and read
void WriteDone ()
 WriteDone method release readers to.
void ReadDone ()
 ReadDone method decrement number of readers.

Public Attributes

 log_CLASSID_m

Private Attributes

bool m_wantWrite
int m_numOfReaders
cmn_Mutex m_oneWRmanyRD_x
cmn_Condition m_noReaders_c
cmn_Condition m_writeFinished_c

Constructor & Destructor Documentation

cmn_oneWRmanyRD::cmn_oneWRmanyRD (  ) 

Definition at line 461 of file cmn_thread.cpp.

00462     :
00463     m_wantWrite(false),
00464     m_numOfReaders(0),
00465     m_noReaders_c(&m_oneWRmanyRD_x),
00466     m_writeFinished_c(&m_oneWRmanyRD_x)
00467 {
00468     // Empty
00469 }
//============================================================================//


Member Function Documentation

void cmn_oneWRmanyRD::WantWrite (  ) 

before write ask for permittion, if someone already set wantWrite then return false othervice wait for readers to complete and return true

Definition at line 473 of file cmn_thread.cpp.

References m_noReaders_c, m_numOfReaders, m_oneWRmanyRD_x, m_wantWrite, m_writeFinished_c, and cmn_Condition::Wait().

00473                                 {
00474     cmn_MutexLock l(m_oneWRmanyRD_x);
00475     while (m_wantWrite) {
00476         m_writeFinished_c.Wait(); // someone already lock for write
00477     }
00478     m_wantWrite = true;
00479     while (m_numOfReaders > 0) {
00480         m_noReaders_c.Wait();
00481     }
00482 }

Here is the call graph for this function:

void cmn_oneWRmanyRD::WantRead (  ) 

wait for writer to finish and read

Definition at line 486 of file cmn_thread.cpp.

References m_numOfReaders, m_oneWRmanyRD_x, m_wantWrite, m_writeFinished_c, and cmn_Condition::Wait().

00486                                {
00487     cmn_MutexLock l(m_oneWRmanyRD_x);
00488     while (m_wantWrite) {
00489         m_writeFinished_c.Wait();
00490     }
00491     m_numOfReaders++;
00492 }

Here is the call graph for this function:

void cmn_oneWRmanyRD::WriteDone (  ) 

WriteDone method release readers to.

Definition at line 496 of file cmn_thread.cpp.

References cmn_Condition::Broadcast(), m_oneWRmanyRD_x, m_wantWrite, and m_writeFinished_c.

00496                                 {
00497     cmn_MutexLock l(m_oneWRmanyRD_x);
00498     m_wantWrite = false;
00499     m_writeFinished_c.Broadcast();
00500 }

Here is the call graph for this function:

void cmn_oneWRmanyRD::ReadDone (  ) 

ReadDone method decrement number of readers.

Definition at line 504 of file cmn_thread.cpp.

References cmn_Condition::Broadcast(), m_noReaders_c, m_numOfReaders, m_oneWRmanyRD_x, and m_wantWrite.

00504                                {
00505     cmn_MutexLock l(m_oneWRmanyRD_x);
00506     m_numOfReaders--;
00507     if (  m_wantWrite
00508         && m_numOfReaders == 0 ) {
00509         m_noReaders_c.Broadcast();
00510     }
00511 }

Here is the call graph for this function:


Member Data Documentation

Definition at line 364 of file thread.h.

Referenced by ReadDone(), WantRead(), WantWrite(), and WriteDone().

Definition at line 366 of file thread.h.

Referenced by ReadDone(), WantRead(), and WantWrite().

Definition at line 368 of file thread.h.

Referenced by ReadDone(), WantRead(), WantWrite(), and WriteDone().

Definition at line 370 of file thread.h.

Referenced by ReadDone(), and WantWrite().

Definition at line 372 of file thread.h.

Referenced by WantRead(), WantWrite(), and WriteDone().

Definition at line 375 of file thread.h.


The documentation for this class was generated from the following files:

Generated on Mon Feb 27 19:05:18 2012 for OPENARCHIVE by  doxygen 1.5.6