src: added ReaderWriterLock, helpers and Semaphore

This commit is contained in:
malte_langkabel
2016-10-10 17:37:38 +02:00
parent 072cccf852
commit 86f652d221
10 changed files with 199 additions and 2 deletions
@@ -0,0 +1,54 @@
#include "utility/synchronization/ReaderWriterLock.h"
ReaderWriterLock::ReaderWriterLock()
: m_readerCount(0)
, m_allowedWriters(1)
, m_allowedReaders(1)
{
}
ReaderWriterLock::ReaderWriterLock(const ReaderWriterLock &lock)
: m_readerCount(0)
, m_allowedWriters(1)
, m_allowedReaders(1)
{
}
ReaderWriterLock::~ReaderWriterLock()
{
}
void ReaderWriterLock::readerLock()
{
m_allowedReaders.wait();
m_allowedReaders.post();
std::lock_guard<std::mutex> lock(m_readerCountMutex);
m_readerCount++;
if (m_readerCount == 1)
{
m_allowedWriters.wait();
}
}
void ReaderWriterLock::readerUnlock()
{
std::lock_guard<std::mutex> lock(m_readerCountMutex);
m_readerCount--;
if (m_readerCount == 0)
{
m_allowedWriters.post();
}
}
void ReaderWriterLock::writerLock()
{
m_allowedReaders.wait();
m_allowedWriters.wait();
}
void ReaderWriterLock::writerUnlock()
{
m_allowedWriters.post();
m_allowedReaders.post();
}