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