Skip to content

Commit ca3bd59

Browse files
committed
Fix Windows CI: complete pthread shim in quant.h (thread+cond+create+join)
1 parent 10d5cb3 commit ca3bd59

1 file changed

Lines changed: 16 additions & 0 deletions

File tree

quant.h

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,12 +89,28 @@ const char* quant_version(void);
8989
#include <errno.h>
9090
#ifdef _WIN32
9191
#include <windows.h>
92+
#include <process.h>
93+
/* Full pthread shim for MSVC using Windows primitives */
94+
typedef HANDLE pthread_t;
9295
#define pthread_mutex_t SRWLOCK
9396
#define PTHREAD_MUTEX_INITIALIZER SRWLOCK_INIT
9497
#define pthread_mutex_init(m,a) (InitializeSRWLock(m),0)
9598
#define pthread_mutex_lock(m) AcquireSRWLockExclusive(m)
9699
#define pthread_mutex_unlock(m) ReleaseSRWLockExclusive(m)
97100
#define pthread_mutex_destroy(m) ((void)0)
101+
#define pthread_cond_t CONDITION_VARIABLE
102+
#define pthread_cond_init(c,a) InitializeConditionVariable(c)
103+
#define pthread_cond_wait(c,m) SleepConditionVariableSRW(c,m,INFINITE,0)
104+
#define pthread_cond_signal(c) WakeConditionVariable(c)
105+
#define pthread_cond_broadcast(c) WakeAllConditionVariable(c)
106+
#define pthread_cond_destroy(c) ((void)0)
107+
static inline int pthread_create(pthread_t* t, const void* a, void*(*fn)(void*), void* arg) {
108+
(void)a; *t = (HANDLE)_beginthreadex(NULL,0,(unsigned(__stdcall*)(void*))fn,arg,0,NULL);
109+
return *t ? 0 : -1;
110+
}
111+
static inline int pthread_join(pthread_t t, void** r) {
112+
(void)r; WaitForSingleObject(t, INFINITE); CloseHandle(t); return 0;
113+
}
98114
#else
99115
#include <pthread.h>
100116
#endif

0 commit comments

Comments
 (0)