squall/storm/thread/CSRWLock.cpp

48 lines
1.1 KiB
C++
Raw Normal View History

2020-11-01 23:13:02 -06:00
#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
}
2020-11-01 23:13:02 -06:00
void CSRWLock::Enter(int32_t forwriting) {
2020-12-02 20:04:02 -06:00
#if defined(WHOA_SYSTEM_WIN)
SRWLock::SURWLockEnter(&this->m_opaqueData, forwriting);
2020-11-01 23:13:02 -06:00
#endif
2020-12-02 20:04:02 -06:00
#if defined(WHOA_SYSTEM_MAC) || defined(WHOA_SYSTEM_LINUX)
2020-11-01 23:13:02 -06:00
if (forwriting) {
pthread_rwlock_wrlock(&this->m_lock);
} else {
pthread_rwlock_rdlock(&this->m_lock);
}
#endif
}
void CSRWLock::Leave(int32_t fromwriting) {
2020-12-02 20:04:02 -06:00
#if defined(WHOA_SYSTEM_WIN)
SRWLock::SURWLockLeave(&this->m_opaqueData, fromwriting);
2020-11-01 23:13:02 -06:00
#endif
2020-12-02 20:04:02 -06:00
#if defined(WHOA_SYSTEM_MAC) || defined(WHOA_SYSTEM_LINUX)
2020-11-01 23:13:02 -06:00
pthread_rwlock_unlock(&this->m_lock);
#endif
}