38 lines
543 B
C++
38 lines
543 B
C++
#include "stdafx.h"
|
|
#include "RWLock.h"
|
|
|
|
RWLock::RWLock()
|
|
{
|
|
_readers = _writers = 0;
|
|
}
|
|
|
|
void RWLock::AcquireReadLock()
|
|
{
|
|
_cond.BeginSynchronized();
|
|
_readers++;
|
|
_cond.EndSynchronized();
|
|
}
|
|
|
|
void RWLock::ReleaseReadLock()
|
|
{
|
|
_cond.BeginSynchronized();
|
|
if (!(--_readers))
|
|
if(_writers)
|
|
_cond.Signal();
|
|
_cond.EndSynchronized();
|
|
}
|
|
|
|
void RWLock::AcquireWriteLock()
|
|
{
|
|
_cond.BeginSynchronized();
|
|
_writers++;
|
|
if (_readers)
|
|
_cond.Wait();
|
|
}
|
|
|
|
void RWLock::ReleaseWriteLock()
|
|
{
|
|
if (--_writers)
|
|
_cond.Signal();
|
|
_cond.EndSynchronized();
|
|
} |