4 #include <condition_variable> 30 void BeginWrite(
size_t nWriterThreadId = 0);
33 size_t GetCurrentThreadId();
39 bool HasWaitingWritersAndSingleReader();
48 uint32 GetWritelockRecursiveDepth()
const;
50 bool StartReadFromNewReader();
51 bool StartReadFromWaitingReader();
55 bool StartWriteFromNewWriter(
size_t nWriterId);
56 bool StartWrite(
size_t nWriterId);
57 bool StartWriteFromWaitingWriter(
size_t nWriterId);
61 uint32 m_nActiveReaders;
63 uint32 m_nWaitingReaders;
65 uint32 m_nWaitingWriters;
67 size_t m_activeWriterId;
70 uint32 m_writelock_recursive_depth;
73 uint32 m_readlock_recursive_depth;
74 std::condition_variable m_reader_signal;
75 std::condition_variable m_writer_signal;
82 template <
typename Mutex = BlockReadWriteLock>
86 bool IsValidLock()
const {
return m_bIsValidLock; }
88 : mutex_(m), m_bIsValidLock(
false), m_nWriterLockRecursiveDepth(0)
90 if (mutex_.HasWriterLock())
92 if (mutex_.IsCurrentThreadHasWriterLock())
94 m_bIsValidLock =
true;
95 m_nWriterLockRecursiveDepth = mutex_.GetWritelockRecursiveDepth();
96 for (
int i = 0; i < m_nWriterLockRecursiveDepth; ++i)
107 for (
int i = 0; i < m_nWriterLockRecursiveDepth; ++i)
117 int32 m_nWriterLockRecursiveDepth;
122 template <
typename Mutex = BlockReadWriteLock>
182 template <
typename Mutex = BlockReadWriteLock>
void BeginRead()
recursive calls is possible and will be regarded as new readers at minimum cost.
Definition: BlockReadWriteLock.cpp:20
simple scoped read lock function
Definition: BlockReadWriteLock.h:123
different physics engine has different winding order.
Definition: EventBinding.h:32
Definition: BlockReadWriteLock.h:83
bool HasWaitingWriters()
this function just check writer count WITHOUT using a lock.
Definition: BlockReadWriteLock.cpp:181
cross platform mutex
Definition: Mutex.hpp:88
multiple shared readers and multiple exclusive writers it favors writers over readers.
Definition: BlockReadWriteLock.h:18
cross platform mutex
Definition: mutex.h:95
simple scoped write lock function
Definition: BlockReadWriteLock.h:183
bool IsCurrentThreadHasWriterLock()
whether the current thread is holding the writer lock.
Definition: BlockReadWriteLock.cpp:196