feat(thread): add CCritSect

This commit is contained in:
fallenoak 2023-03-26 23:07:48 -05:00 committed by GitHub
parent 368c2f16c2
commit a500c34d45
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 90 additions and 0 deletions

View file

@ -1,6 +1,7 @@
#ifndef STORM_THREAD_HPP #ifndef STORM_THREAD_HPP
#define STORM_THREAD_HPP #define STORM_THREAD_HPP
#include "storm/thread/CCritSect.hpp"
#include "storm/thread/CSRWLock.hpp" #include "storm/thread/CSRWLock.hpp"
#include "storm/thread/SCritSect.hpp" #include "storm/thread/SCritSect.hpp"
#include "storm/thread/SEvent.hpp" #include "storm/thread/SEvent.hpp"

View file

@ -0,0 +1,41 @@
#include "storm/thread/CCritSect.hpp"
CCritSect::CCritSect() {
#if defined(WHOA_SYSTEM_WIN)
InitializeCriticalSection(&this->m_critsect);
#endif
#if defined(WHOA_SYSTEM_MAC) || defined(WHOA_SYSTEM_LINUX)
pthread_mutex_init(&this->m_critsect, nullptr);
#endif
}
CCritSect::~CCritSect() {
#if defined(WHOA_SYSTEM_WIN)
DeleteCriticalSection(&this->m_critsect);
#endif
#if defined(WHOA_SYSTEM_MAC) || defined(WHOA_SYSTEM_LINUX)
pthread_mutex_destroy(&this->m_critsect);
#endif
}
void CCritSect::Enter() {
#if defined(WHOA_SYSTEM_WIN)
EnterCriticalSection(&this->m_critsect);
#endif
#if defined(WHOA_SYSTEM_MAC) || defined(WHOA_SYSTEM_LINUX)
pthread_mutex_lock(&this->m_critsect);
#endif
}
void CCritSect::Leave() {
#if defined(WHOA_SYSTEM_WIN)
LeaveCriticalSection(&this->m_critsect);
#endif
#if defined(WHOA_SYSTEM_MAC) || defined(WHOA_SYSTEM_LINUX)
pthread_mutex_unlock(&this->m_critsect);
#endif
}

View file

@ -0,0 +1,31 @@
#ifndef STORM_THREAD_C_CRIT_SECT_HPP
#define STORM_THREAD_C_CRIT_SECT_HPP
#if defined(WHOA_SYSTEM_WIN)
#include <windows.h>
#endif
#if defined(WHOA_SYSTEM_MAC) || defined(WHOA_SYSTEM_LINUX)
#include <pthread.h>
#endif
class CCritSect {
public:
// Member functions
CCritSect();
~CCritSect();
void Enter();
void Leave();
private:
// Member variables
#if defined(WHOA_SYSTEM_WIN)
CRITICAL_SECTION m_critsect;
#endif
#if defined(WHOA_SYSTEM_MAC) || defined(WHOA_SYSTEM_LINUX)
pthread_mutex_t m_critsect;
#endif
};
#endif

View file

@ -6,6 +6,23 @@ uint32_t threadProc(void* param) {
return 0; return 0;
}; };
TEST_CASE("CCritSect::Enter", "[thread]") {
SECTION("locks critical section") {
CCritSect critSect;
critSect.Enter();
SUCCEED();
}
}
TEST_CASE("CCritSect::Leave", "[thread]") {
SECTION("unlocks critical section") {
CCritSect critSect;
critSect.Enter();
critSect.Leave();
SUCCEED();
}
}
TEST_CASE("SGetCurrentThreadId", "[thread]") { TEST_CASE("SGetCurrentThreadId", "[thread]") {
SECTION("returns thread id") { SECTION("returns thread id") {
uintptr_t threadId = SGetCurrentThreadId(); uintptr_t threadId = SGetCurrentThreadId();