1 #include <samchon/library/RWMutex.hpp> 5 #include <condition_variable> 12 readingCount =
new atomic<size_t>(0);
13 isWriting =
new atomic<bool>(
false);
15 cv =
new condition_variable();
16 readMtx =
new mutex();
17 writeMtx =
new mutex();
18 minusMtx =
new mutex();
31 void RWMutex::readLock()
const 33 unique_lock<mutex> uk(*readMtx);
34 while (*isWriting ==
true)
37 readingCount->operator++();
39 void RWMutex::readUnlock()
const 41 unique_lock<mutex> uk(*minusMtx);
46 readingCount->operator--() == 0
53 void RWMutex::writeLock()
55 unique_lock<mutex> uk(*writeMtx);
56 while (*isWriting ==
true || *readingCount > 0)
59 isWriting->store(
true );
61 void RWMutex::writeUnlock()
63 isWriting->store(
false );