mirror of
https://github.com/thunderbrewhq/squall.git
synced 2026-02-04 08:59:07 +00:00
47 lines
1.1 KiB
C++
47 lines
1.1 KiB
C++
#include "storm/thread/CSRWLock.hpp"
|
|
|
|
CSRWLock::CSRWLock() {
|
|
#if defined(WHOA_SYSTEM_WIN)
|
|
// TODO
|
|
SRWLock::SURWLockInitialize(&this->m_opaqueData);
|
|
#endif
|
|
|
|
#if defined(WHOA_SYSTEM_MAC) || defined(WHOA_SYSTEM_LINUX)
|
|
pthread_rwlock_init(&this->m_lock, nullptr);
|
|
#endif
|
|
}
|
|
|
|
CSRWLock::~CSRWLock() {
|
|
#if defined(WHOA_SYSTEM_WIN)
|
|
SRWLock::SURWLockDelete(&this->m_opaqueData);
|
|
// TODO
|
|
#endif
|
|
|
|
#if defined(WHOA_SYSTEM_MAC) || defined(WHOA_SYSTEM_LINUX)
|
|
pthread_rwlock_destroy(&this->m_lock);
|
|
#endif
|
|
}
|
|
|
|
void CSRWLock::Enter(int32_t forwriting) {
|
|
#if defined(WHOA_SYSTEM_WIN)
|
|
SRWLock::SURWLockEnter(&this->m_opaqueData, forwriting);
|
|
#endif
|
|
|
|
#if defined(WHOA_SYSTEM_MAC) || defined(WHOA_SYSTEM_LINUX)
|
|
if (forwriting) {
|
|
pthread_rwlock_wrlock(&this->m_lock);
|
|
} else {
|
|
pthread_rwlock_rdlock(&this->m_lock);
|
|
}
|
|
#endif
|
|
}
|
|
|
|
void CSRWLock::Leave(int32_t fromwriting) {
|
|
#if defined(WHOA_SYSTEM_WIN)
|
|
SRWLock::SURWLockLeave(&this->m_opaqueData, fromwriting);
|
|
#endif
|
|
|
|
#if defined(WHOA_SYSTEM_MAC) || defined(WHOA_SYSTEM_LINUX)
|
|
pthread_rwlock_unlock(&this->m_lock);
|
|
#endif
|
|
}
|