#include <thread.h>

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 |
| 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 } //============================================================================//
| 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 }

| 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 }

| 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 }

| 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 }

bool cmn_oneWRmanyRD::m_wantWrite [private] |
Definition at line 364 of file thread.h.
Referenced by ReadDone(), WantRead(), WantWrite(), and WriteDone().
int cmn_oneWRmanyRD::m_numOfReaders [private] |
cmn_Mutex cmn_oneWRmanyRD::m_oneWRmanyRD_x [private] |
Definition at line 368 of file thread.h.
Referenced by ReadDone(), WantRead(), WantWrite(), and WriteDone().
cmn_Condition cmn_oneWRmanyRD::m_noReaders_c [private] |
1.5.6