@@ -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