1 #ifdef _WIN32
2 
3 #include <windows.h>
4 
5 #define MAX_SEM_COUNT 1024 // What are the tradeoffs with this value?
6 
naNewLock()7 void* naNewLock()
8 {
9     LPCRITICAL_SECTION lock = malloc(sizeof(CRITICAL_SECTION));
10     InitializeCriticalSection(lock);
11     return lock;
12 }
13 
naLock(void * lock)14 void  naLock(void* lock)   { EnterCriticalSection((LPCRITICAL_SECTION)lock); }
naUnlock(void * lock)15 void  naUnlock(void* lock) { LeaveCriticalSection((LPCRITICAL_SECTION)lock); }
naFreeLock(void * lock)16 void naFreeLock(void* lock) { free(lock); }
naNewSem()17 void* naNewSem()           { return CreateSemaphore(0, 0, MAX_SEM_COUNT, 0); }
naSemDown(void * sem)18 void  naSemDown(void* sem) { WaitForSingleObject((HANDLE)sem, INFINITE); }
naSemUp(void * sem,int count)19 void  naSemUp(void* sem, int count) { ReleaseSemaphore(sem, count, 0); }
naFreeSem(void * sem)20 void naFreeSem(void* sem) { ReleaseSemaphore(sem, 1, 0); }
21 
22 #endif
23 
24 extern int GccWarningWorkaround_IsoCForbidsAnEmptySourceFile;
25