29 #ifndef COMPAT_W32PTHREADS_H 30 #define COMPAT_W32PTHREADS_H 38 #define WIN32_LEAN_AND_MEAN 49 void *(*func)(
void* arg);
55 typedef SRWLOCK pthread_mutex_t;
58 #define PTHREAD_MUTEX_INITIALIZER SRWLOCK_INIT 59 #define PTHREAD_COND_INITIALIZER CONDITION_VARIABLE_INIT 61 #define InitializeCriticalSection(x) InitializeCriticalSectionEx(x, 0, 0) 62 #define WaitForSingleObject(a, b) WaitForSingleObjectEx(a, b, FALSE) 64 static av_unused
unsigned __stdcall attribute_align_arg win32thread_worker(
void *arg)
67 h->ret = h->func(h->arg);
71 static av_unused
int pthread_create(
pthread_t *thread,
const void *unused_attr,
72 void *(*start_routine)(
void*),
void *arg)
74 thread->func = start_routine;
77 thread->handle = (
void*)CreateThread(NULL, 0, win32thread_worker, thread,
80 thread->handle = (
void*)_beginthreadex(NULL, 0, win32thread_worker, thread,
83 return !thread->handle;
86 static av_unused
int pthread_join(
pthread_t thread,
void **value_ptr)
88 DWORD ret = WaitForSingleObject(thread.handle, INFINITE);
89 if (ret != WAIT_OBJECT_0) {
90 if (ret == WAIT_ABANDONED)
96 *value_ptr = thread.ret;
97 CloseHandle(thread.handle);
101 static inline int pthread_mutex_init(pthread_mutex_t *m,
void* attr)
103 InitializeSRWLock(m);
106 static inline int pthread_mutex_destroy(pthread_mutex_t *m)
111 static inline int pthread_mutex_lock(pthread_mutex_t *m)
113 AcquireSRWLockExclusive(m);
116 static inline int pthread_mutex_unlock(pthread_mutex_t *m)
118 ReleaseSRWLockExclusive(m);
123 #define PTHREAD_ONCE_INIT INIT_ONCE_STATIC_INIT 125 static av_unused
int pthread_once(pthread_once_t *once_control,
void (*init_routine)(
void))
127 BOOL pending = FALSE;
128 InitOnceBeginInitialize(once_control, 0, &pending, NULL);
131 InitOnceComplete(once_control, 0, NULL);
135 static inline int pthread_cond_init(
pthread_cond_t *cond,
const void *unused_attr)
137 InitializeConditionVariable(cond);
149 WakeAllConditionVariable(cond);
153 static inline int pthread_cond_wait(
pthread_cond_t *cond, pthread_mutex_t *mutex)
155 SleepConditionVariableSRW(cond, mutex, INFINITE, 0);
161 WakeConditionVariable(cond);
Definition: os2threads.h:62
Memory handling functions.
Macro definitions for various function/variable attributes.
Definition: os2threads.h:54
common internal API header
common internal and external API header
Definition: os2threads.h:40