From 2d5c094bbfb69841512007e1eb88c0c6bc1b5c28 Mon Sep 17 00:00:00 2001 From: hyzboy Date: Fri, 12 Mar 2021 18:10:50 +0800 Subject: [PATCH] append ThreadMutext.mm --- src/Apple/ThreadMutext.mm | 62 +++++++++++++++++++++++++++++++++++++++ src/CMakeLists.txt | 4 +-- 2 files changed, 64 insertions(+), 2 deletions(-) create mode 100644 src/Apple/ThreadMutext.mm diff --git a/src/Apple/ThreadMutext.mm b/src/Apple/ThreadMutext.mm new file mode 100644 index 0000000..b88626c --- /dev/null +++ b/src/Apple/ThreadMutext.mm @@ -0,0 +1,62 @@ +#include +#include +#include +#include + +namespace hgl +{ + void GetWaitTime(struct timespec &,double); + + ThreadMutex::ThreadMutex() + { + ptr=OS_UNFAIR_LOCK_INIT; + } + + ThreadMutex::~ThreadMutex() + { + if(ptr!=OS_UNFAIR_LOCK_INIT) + os_unfair_lock_unlock(&ptr); + } + + /** + * 取得控制权 + * 如果对象处于排斥状态,则等待 + */ + void ThreadMutex::Lock() + { + os_unfair_lock_lock(&ptr); + } + + /** + * 尝试取得控制权 + * @return 是否成功取得控制权 + */ + bool ThreadMutex::TryLock() + { + return os_unfair_lock_trylock(&ptr); + } + +#if !defined(__APPLE__)&&!defined(__ANDROID__) + /** + * 等待并取得控制权 + * @param time 等待的最大时间,时间为0表示尝试 + * @return 是否取得控制权 + */ + bool ThreadMutex::WaitLock(double t) + { + struct timespec abstime; + + GetWaitTime(abstime,t); + + return !pthread_mutex_timedlock(&ptr, &abstime); + } +#endif//__APPLE__ + + /** + * 放弃控制权 + */ + void ThreadMutex::Unlock() + { + os_unfair_lock_unlock(&ptr); + } +}//namespace hgl diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index e54108e..8302dd4 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -132,8 +132,8 @@ SET(PLATFORM_SOURCE ${PLATFORM_SOURCE} ${PLATFORM_EXTERNAL_MODULE_SOURCE} ${PLATFORM_INPUT_DEVICE_SOURCE} ${PLATFORM_WINDOW_SOURCE} - - ${CPU_INFO_HEADER} + + ${CPU_INFO_HEADER} ${CPU_INFO_SOURCE} )