Jolt Physics
A multi core friendly Game Physics Engine
Loading...
Searching...
No Matches
Semaphore.h
Go to the documentation of this file.
1// Jolt Physics Library (https://github.com/jrouwe/JoltPhysics)
2// SPDX-FileCopyrightText: 2023 Jorrit Rouwe
3// SPDX-License-Identifier: MIT
4
5#pragma once
6
7#include <Jolt/Core/Atomics.h>
8
9// Determine which platform specific construct we'll use
11#ifdef JPH_PLATFORM_WINDOWS
12 // We include windows.h in the cpp file, the semaphore itself is a void pointer
13#elif defined(JPH_PLATFORM_LINUX) || defined(JPH_PLATFORM_ANDROID) || defined(JPH_PLATFORM_BSD) || defined(JPH_PLATFORM_WASM)
14 #include <semaphore.h>
15 #define JPH_USE_PTHREADS
16#elif defined(JPH_PLATFORM_MACOS) || defined(JPH_PLATFORM_IOS)
17 #include <dispatch/dispatch.h>
18 #define JPH_USE_GRAND_CENTRAL_DISPATCH
19#elif defined(JPH_PLATFORM_BLUE)
20 // Jolt/Core/PlatformBlue.h should have defined everything that is needed below
21#else
22 #include <mutex>
23 #include <condition_variable>
24#endif
26
28
32{
33public:
35 Semaphore();
36 ~Semaphore();
37
39 void Release(uint inNumber = 1);
40
42 void Acquire(uint inNumber = 1);
43
45 inline int GetValue() const { return mCount.load(std::memory_order_relaxed); }
46
47private:
48#if defined(JPH_PLATFORM_WINDOWS) || defined(JPH_USE_PTHREADS) || defined(JPH_USE_GRAND_CENTRAL_DISPATCH) || defined(JPH_PLATFORM_BLUE)
49#ifdef JPH_PLATFORM_WINDOWS
50 using SemaphoreType = void *;
51#elif defined(JPH_USE_PTHREADS)
52 using SemaphoreType = sem_t;
53#elif defined(JPH_USE_GRAND_CENTRAL_DISPATCH)
54 using SemaphoreType = dispatch_semaphore_t;
55#elif defined(JPH_PLATFORM_BLUE)
56 using SemaphoreType = JPH_PLATFORM_BLUE_SEMAPHORE;
57#endif
58 alignas(JPH_CACHE_LINE_SIZE) atomic<int> mCount { 0 };
59 SemaphoreType mSemaphore { };
60#else
61 // Other platforms: Emulate a semaphore using a mutex, condition variable and count
62 std::mutex mLock;
63 std::condition_variable mWaitVariable;
64 atomic<int> mCount { 0 };
65#endif
66};
67
#define JPH_EXPORT
Definition Core.h:271
#define JPH_CACHE_LINE_SIZE
Definition Core.h:521
#define JPH_SUPPRESS_WARNINGS_STD_BEGIN
Definition Core.h:419
#define JPH_SUPPRESS_WARNINGS_STD_END
Definition Core.h:431
unsigned int uint
Definition Core.h:481
#define JPH_NAMESPACE_END
Definition Core.h:414
#define JPH_NAMESPACE_BEGIN
Definition Core.h:408
Definition Semaphore.h:32
int GetValue() const
Get the current value of the semaphore.
Definition Semaphore.h:45