mirror of
https://github.com/thunderbrewhq/squall.git
synced 2025-12-12 02:22:30 +00:00
feat(thread): add CCritSect
This commit is contained in:
parent
368c2f16c2
commit
a500c34d45
4 changed files with 90 additions and 0 deletions
|
|
@ -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"
|
||||||
|
|
|
||||||
41
storm/thread/CCritSect.cpp
Normal file
41
storm/thread/CCritSect.cpp
Normal 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
|
||||||
|
}
|
||||||
31
storm/thread/CCritSect.hpp
Normal file
31
storm/thread/CCritSect.hpp
Normal 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
|
||||||
|
|
@ -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();
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue