diff --git a/storm/Thread.hpp b/storm/Thread.hpp index 1c84d3e..ad83c3b 100644 --- a/storm/Thread.hpp +++ b/storm/Thread.hpp @@ -1,6 +1,7 @@ #ifndef STORM_THREAD_HPP #define STORM_THREAD_HPP +#include "storm/thread/CSRWLock.hpp" #include "storm/thread/SCritSect.hpp" #include "storm/thread/SEvent.hpp" #include "storm/thread/SSyncObject.hpp" diff --git a/storm/thread/CSRWLock.cpp b/storm/thread/CSRWLock.cpp new file mode 100644 index 0000000..47f90af --- /dev/null +++ b/storm/thread/CSRWLock.cpp @@ -0,0 +1,25 @@ +#include "storm/thread/CSRWLock.hpp" + +void CSRWLock::Enter(int32_t forwriting) { +#ifdef PLATFORM_WIN + // TODO +#endif + +#if defined(PLATFORM_MAC) || defined(PLATFORM_LINUX) + if (forwriting) { + pthread_rwlock_wrlock(&this->m_lock); + } else { + pthread_rwlock_rdlock(&this->m_lock); + } +#endif +} + +void CSRWLock::Leave(int32_t fromwriting) { +#ifdef PLATFORM_WIN + // TODO +#endif + +#if defined(PLATFORM_MAC) || defined(PLATFORM_LINUX) + pthread_rwlock_unlock(&this->m_lock); +#endif +} diff --git a/storm/thread/CSRWLock.hpp b/storm/thread/CSRWLock.hpp new file mode 100644 index 0000000..6425cce --- /dev/null +++ b/storm/thread/CSRWLock.hpp @@ -0,0 +1,26 @@ +#ifndef STORM_THREAD_CS_RW_LOCK_HPP +#define STORM_THREAD_CS_RW_LOCK_HPP + +#include + +#if defined(PLATFORM_MAC) || defined(PLATFORM_LINUX) +#include +#endif + +class CSRWLock { + public: + // Member variables +#ifdef PLATFORM_WIN + char m_opaqueData[12]; +#endif + +#if defined(PLATFORM_MAC) || defined(PLATFORM_LINUX) + pthread_rwlock_t m_lock; +#endif + + // Member functions + void Enter(int32_t forwriting); + void Leave(int32_t fromwriting); +}; + +#endif