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