From 99e2e923d0c77b02f3fb4ff648ea916954868606 Mon Sep 17 00:00:00 2001 From: Yuqian Yang Date: Fri, 28 Feb 2025 23:13:39 +0800 Subject: chore(store): move everything to store. --- works/life/operating-system-experiment/Mutex.cpp | 100 ----------------------- 1 file changed, 100 deletions(-) delete mode 100644 works/life/operating-system-experiment/Mutex.cpp (limited to 'works/life/operating-system-experiment/Mutex.cpp') diff --git a/works/life/operating-system-experiment/Mutex.cpp b/works/life/operating-system-experiment/Mutex.cpp deleted file mode 100644 index 8acfdc5..0000000 --- a/works/life/operating-system-experiment/Mutex.cpp +++ /dev/null @@ -1,100 +0,0 @@ -#include "Mutex.h" - -#include - -#ifndef CRU_WINDOWS -#include -#endif - -namespace cru { -Mutex::Mutex() { -#ifdef CRU_WINDOWS - handle_ = CreateMutexW(nullptr, FALSE, nullptr); - assert(handle_); -#else - mutex_ = std::make_unique(); - - auto c = pthread_mutex_init(mutex_.get(), nullptr); - assert(c == 0); -#endif -} - -Mutex::Mutex(Mutex &&other) -#ifdef CRU_WINDOWS - : handle_(other.handle_) -#else - : mutex_(std::move(other.mutex_)) -#endif -{ -#ifdef CRU_WINDOWS - other.handle_ = nullptr; -#endif -} - -Mutex &Mutex::operator=(Mutex &&other) { - if (this != &other) { - Destroy(); -#ifdef CRU_WINDOWS - handle_ = other.handle_; - other.handle_ = nullptr; -#else - mutex_ = std::move(other.mutex_); -#endif - } - return *this; -} - -Mutex::~Mutex() { Destroy(); } - -void Mutex::Lock() { -#ifdef CRU_WINDOWS - auto c = WaitForSingleObject(handle_, INFINITE); - assert(c == WAIT_OBJECT_0); -#else - assert(mutex_); - auto c = pthread_mutex_lock(mutex_.get()); - assert(c == 0); -#endif -} - -bool Mutex::TryLock() { -#ifdef CRU_WINDOWS - auto c = WaitForSingleObject(handle_, 0); - assert(c == WAIT_OBJECT_0 || c == WAIT_TIMEOUT); - return c == WAIT_OBJECT_0 ? true : false; -#else - assert(mutex_); - auto c = pthread_mutex_trylock(mutex_.get()); - assert(c == 0 || c == EBUSY); - return c == 0 ? true : false; -#endif -} - -void Mutex::Unlock() { -#ifdef CRU_WINDOWS - auto c = ReleaseMutex(handle_); - assert(c); -#else - assert(mutex_); - auto c = pthread_mutex_unlock(mutex_.get()); - assert(c == 0); -#endif -} - -void Mutex::Destroy() { -#ifdef CRU_WINDOWS - if (handle_ != nullptr) { - auto c = CloseHandle(handle_); - assert(c); - handle_ = nullptr; - } -#else - if (mutex_ != nullptr) { - auto c = pthread_mutex_destroy(mutex_.get()); - assert(c == 0); - mutex_ = nullptr; - } -#endif -} - -} // namespace cru -- cgit v1.2.3