diff --git a/src/common/threads.cpp b/src/common/threads.cpp index fa5e28e48..bfa8334bd 100644 --- a/src/common/threads.cpp +++ b/src/common/threads.cpp @@ -8,10 +8,6 @@ #include // IWYU pragma: keep #include -#if KYTY_PLATFORM == KYTY_PLATFORM_WINDOWS && KYTY_COMPILER == KYTY_COMPILER_CLANG -#define KYTY_WIN_CS -#endif - // macOS has no clock_nanosleep. #if KYTY_PLATFORM != KYTY_PLATFORM_WINDOWS && !defined(__APPLE__) #define KYTY_POSIX_HIGH_RES_SLEEP @@ -22,7 +18,7 @@ #include #include -#ifdef KYTY_WIN_CS +#if KYTY_PLATFORM == KYTY_PLATFORM_WINDOWS #include // IWYU pragma: keep // IWYU pragma: no_include constexpr DWORD KYTY_CS_SPIN_COUNT = 4000; @@ -133,7 +129,7 @@ namespace Common { using thread_id_t = std::thread::id; struct MutexPrivate { -#ifdef KYTY_WIN_CS +#if KYTY_PLATFORM == KYTY_PLATFORM_WINDOWS MutexPrivate() { InitializeCriticalSectionAndSpinCount(&m_cs, KYTY_CS_SPIN_COUNT); } ~MutexPrivate() { DeleteCriticalSection(&m_cs); } KYTY_CLASS_NO_COPY(MutexPrivate); @@ -144,7 +140,7 @@ struct MutexPrivate { }; struct CondVarPrivate { -#ifdef KYTY_WIN_CS +#if KYTY_PLATFORM == KYTY_PLATFORM_WINDOWS CondVarPrivate() { static auto func = ResolveInitializeConditionVariable(); EXIT_NOT_IMPLEMENTED(func == nullptr); @@ -216,7 +212,7 @@ void Thread::Detach() { } void Thread::SleepMicro(uint32_t micros) { -#ifdef KYTY_WIN_CS +#if KYTY_PLATFORM == KYTY_PLATFORM_WINDOWS SleepHighResolution100ns(static_cast(micros) * 10); #elif defined(KYTY_POSIX_HIGH_RES_SLEEP) SleepHighResolutionNanos(static_cast(micros) * 1000); @@ -226,7 +222,7 @@ void Thread::SleepMicro(uint32_t micros) { } void Thread::SleepNano(uint64_t nanos) { -#ifdef KYTY_WIN_CS +#if KYTY_PLATFORM == KYTY_PLATFORM_WINDOWS SleepHighResolution100ns((nanos + 99) / 100); #elif defined(KYTY_POSIX_HIGH_RES_SLEEP) SleepHighResolutionNanos(nanos); @@ -262,7 +258,7 @@ Mutex::~Mutex() { } void Mutex::Lock() { -#ifdef KYTY_WIN_CS +#if KYTY_PLATFORM == KYTY_PLATFORM_WINDOWS EnterCriticalSection(&m_mutex->m_cs); #else m_mutex->m_mutex.lock(); @@ -270,7 +266,7 @@ void Mutex::Lock() { } void Mutex::Unlock() { -#ifdef KYTY_WIN_CS +#if KYTY_PLATFORM == KYTY_PLATFORM_WINDOWS LeaveCriticalSection(&m_mutex->m_cs); #else m_mutex->m_mutex.unlock(); @@ -278,7 +274,7 @@ void Mutex::Unlock() { } bool Mutex::TryLock() { -#ifdef KYTY_WIN_CS +#if KYTY_PLATFORM == KYTY_PLATFORM_WINDOWS return (TryEnterCriticalSection(&m_mutex->m_cs) != 0); #else return m_mutex->m_mutex.try_lock(); @@ -292,7 +288,7 @@ CondVar::~CondVar() { } void CondVar::Wait(Mutex* mutex) { -#ifndef KYTY_WIN_CS +#if KYTY_PLATFORM != KYTY_PLATFORM_WINDOWS std::unique_lock cpp_lock(mutex->m_mutex->m_mutex, std::adopt_lock_t()); #endif auto poll_callback = [&] { @@ -300,7 +296,7 @@ void CondVar::Wait(Mutex* mutex) { if (callback == nullptr) { return; } -#if defined(KYTY_WIN_CS) +#if KYTY_PLATFORM == KYTY_PLATFORM_WINDOWS LeaveCriticalSection(&mutex->m_mutex->m_cs); callback(); EnterCriticalSection(&mutex->m_mutex->m_cs); @@ -310,7 +306,7 @@ void CondVar::Wait(Mutex* mutex) { cpp_lock.lock(); #endif }; -#ifdef KYTY_WIN_CS +#if KYTY_PLATFORM == KYTY_PLATFORM_WINDOWS static auto func = ResolveSleepConditionVariableCS(); EXIT_NOT_IMPLEMENTED(func == nullptr); if (g_cond_wait_poll_callback == nullptr) { @@ -340,10 +336,10 @@ void CondVar::SetWaitPollCallback(wait_poll_func_t callback) { bool CondVar::WaitFor(Mutex* mutex, uint32_t micros) { bool ok = false; -#ifndef KYTY_WIN_CS +#if KYTY_PLATFORM != KYTY_PLATFORM_WINDOWS std::unique_lock cpp_lock(mutex->m_mutex->m_mutex, std::adopt_lock_t()); #endif -#ifdef KYTY_WIN_CS +#if KYTY_PLATFORM == KYTY_PLATFORM_WINDOWS static auto func = ResolveSleepConditionVariableCS(); EXIT_NOT_IMPLEMENTED(func == nullptr); ok = !(func(&m_cond_var->m_cv, &mutex->m_mutex->m_cs, (micros < 1000 ? 1 : micros / 1000)) == @@ -358,7 +354,7 @@ bool CondVar::WaitFor(Mutex* mutex, uint32_t micros) { } void CondVar::Signal() { -#ifdef KYTY_WIN_CS +#if KYTY_PLATFORM == KYTY_PLATFORM_WINDOWS static auto func = ResolveWakeConditionVariable(); EXIT_NOT_IMPLEMENTED(func == nullptr); func(&m_cond_var->m_cv); @@ -368,7 +364,7 @@ void CondVar::Signal() { } void CondVar::SignalAll() { -#ifdef KYTY_WIN_CS +#if KYTY_PLATFORM == KYTY_PLATFORM_WINDOWS static auto func = ResolveWakeAllConditionVariable(); EXIT_NOT_IMPLEMENTED(func == nullptr); func(&m_cond_var->m_cv);