Add condition variable support and reimplement PLT_EVENT with it for non-Win32 platforms

This commit is contained in:
Cameron Gutman committed 2021-06-09 19:29:31 -05:00
1 parent ccec4e8475
commit 61b4fc1fe7
2 files changed
+86 -72

No files matched your search

+19 -16
View File
@@ -7,18 +7,14 @@ typedef void(*ThreadEntry)(void* context);
#if defined(LC_WINDOWS)
typedef SRWLOCK PLT_MUTEX;
typedef HANDLE PLT_EVENT;
typedef CONDITION_VARIABLE PLT_COND;
typedef struct _PLT_THREAD {
HANDLE handle;
bool cancelled;
} PLT_THREAD;
#elif defined(__vita__)
typedef int PLT_MUTEX;
typedef struct _PLT_EVENT {
int mutex;
int cond;
bool signalled;
} PLT_EVENT;
typedef int PLT_COND;
typedef struct _PLT_THREAD {
int handle;
int cancelled;
@@ -27,22 +23,14 @@ typedef struct _PLT_THREAD {
} PLT_THREAD;
#elif defined(__WIIU__)
typedef OSFastMutex PLT_MUTEX;
typedef struct _PLT_EVENT {
OSFastMutex mutex;
OSFastCondition cond;
int signalled;
} PLT_EVENT;
typedef OSFastCondition PLT_COND;
typedef struct _PLT_THREAD {
OSThread thread;
int cancelled;
} PLT_THREAD;
#elif defined (LC_POSIX)
typedef pthread_mutex_t PLT_MUTEX;
typedef struct _PLT_EVENT {
pthread_mutex_t mutex;
pthread_cond_t cond;
bool signalled;
} PLT_EVENT;
typedef pthread_cond_t PLT_COND;
typedef struct _PLT_THREAD {
pthread_t thread;
bool cancelled;
@@ -51,6 +39,16 @@ typedef struct _PLT_THREAD {
#error Unsupported platform
#endif
#ifdef LC_WINDOWS
typedef HANDLE PLT_EVENT;
#else
typedef struct _PLT_EVENT {
PLT_MUTEX mutex;
PLT_COND cond;
bool signalled;
} PLT_EVENT;
#endif
int PltCreateMutex(PLT_MUTEX* mutex);
void PltDeleteMutex(PLT_MUTEX* mutex);
void PltLockMutex(PLT_MUTEX* mutex);
@@ -68,6 +66,11 @@ void PltSetEvent(PLT_EVENT* event);
void PltClearEvent(PLT_EVENT* event);
int PltWaitForEvent(PLT_EVENT* event);
int PltCreateConditionVariable(PLT_COND* cond, PLT_MUTEX* mutex);
void PltDeleteConditionVariable(PLT_COND* cond);
void PltSignalConditionVariable(PLT_COND* cond);
void PltWaitForConditionVariable(PLT_COND* cond, PLT_MUTEX* mutex);
#define PLT_WAIT_SUCCESS 0
#define PLT_WAIT_INTERRUPTED 1