diff options
author | Chris Robinson <[email protected]> | 2023-06-01 18:16:17 -0700 |
---|---|---|
committer | Chris Robinson <[email protected]> | 2023-06-01 18:16:17 -0700 |
commit | 2b7ab0b75086f3d73a7ffe9bc05a80e5d9c625f5 (patch) | |
tree | 49c532388826c07d21b0a7b9d206d5356095228c /common/alsem.h | |
parent | c200eb73a7cf47dbd1a4a3785be471adfb3513d8 (diff) |
Rename threads.cpp/h to alsem.cpp/h
Diffstat (limited to 'common/alsem.h')
-rw-r--r-- | common/alsem.h | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/common/alsem.h b/common/alsem.h new file mode 100644 index 00000000..9f72d1c6 --- /dev/null +++ b/common/alsem.h @@ -0,0 +1,43 @@ +#ifndef COMMON_ALSEM_H +#define COMMON_ALSEM_H + +#if defined(__APPLE__) +#include <AvailabilityMacros.h> +#include <TargetConditionals.h> +#if (((MAC_OS_X_VERSION_MIN_REQUIRED > 1050) && !defined(__ppc__)) || TARGET_OS_IOS || TARGET_OS_TV) +#include <dispatch/dispatch.h> +#define AL_APPLE_HAVE_DISPATCH 1 +#else +#include <semaphore.h> /* Fallback option for Apple without a working libdispatch */ +#endif +#elif !defined(_WIN32) +#include <semaphore.h> +#endif + +namespace al { + +class semaphore { +#ifdef _WIN32 + using native_type = void*; +#elif defined(AL_APPLE_HAVE_DISPATCH) + using native_type = dispatch_semaphore_t; +#else + using native_type = sem_t; +#endif + native_type mSem; + +public: + semaphore(unsigned int initial=0); + semaphore(const semaphore&) = delete; + ~semaphore(); + + semaphore& operator=(const semaphore&) = delete; + + void post(); + void wait() noexcept; + bool try_wait() noexcept; +}; + +} // namespace al + +#endif /* COMMON_ALSEM_H */ |