1 /** 2 * This file is part of the mingw-w64 runtime package. 3 * No warranty is given; refer to the file DISCLAIMER within this package. 4 */ 5 #ifndef _SYNCHAPI_H_ 6 #define _SYNCHAPI_H_ 7 8 #include <apiset.h> 9 #include <apisetcconv.h> 10 #include <minwindef.h> 11 #include <minwinbase.h> 12 13 #ifdef __cplusplus 14 extern "C" { 15 #endif 16 17 #define SRWLOCK_INIT RTL_SRWLOCK_INIT 18 19 #define INIT_ONCE_STATIC_INIT RTL_RUN_ONCE_INIT 20 21 #define INIT_ONCE_CHECK_ONLY RTL_RUN_ONCE_CHECK_ONLY 22 #define INIT_ONCE_ASYNC RTL_RUN_ONCE_ASYNC 23 #define INIT_ONCE_INIT_FAILED RTL_RUN_ONCE_INIT_FAILED 24 25 #define INIT_ONCE_CTX_RESERVED_BITS RTL_RUN_ONCE_CTX_RESERVED_BITS 26 27 #define CONDITION_VARIABLE_INIT RTL_CONDITION_VARIABLE_INIT 28 29 #define CONDITION_VARIABLE_LOCKMODE_SHARED RTL_CONDITION_VARIABLE_LOCKMODE_SHARED 30 31 #define MUTEX_MODIFY_STATE MUTANT_QUERY_STATE 32 #define MUTEX_ALL_ACCESS MUTANT_ALL_ACCESS 33 34 typedef RTL_SRWLOCK SRWLOCK, *PSRWLOCK; 35 36 typedef RTL_RUN_ONCE INIT_ONCE; 37 typedef PRTL_RUN_ONCE PINIT_ONCE; 38 typedef PRTL_RUN_ONCE LPINIT_ONCE; 39 40 typedef WINBOOL (WINAPI *PINIT_ONCE_FN) (PINIT_ONCE InitOnce, PVOID Parameter, PVOID *Context); 41 typedef RTL_CONDITION_VARIABLE CONDITION_VARIABLE, *PCONDITION_VARIABLE; 42 43 WINBASEAPI VOID WINAPI EnterCriticalSection (LPCRITICAL_SECTION lpCriticalSection); 44 WINBASEAPI VOID WINAPI LeaveCriticalSection (LPCRITICAL_SECTION lpCriticalSection); 45 WINBASEAPI WINBOOL WINAPI TryEnterCriticalSection (LPCRITICAL_SECTION lpCriticalSection); 46 WINBASEAPI VOID WINAPI DeleteCriticalSection (LPCRITICAL_SECTION lpCriticalSection); 47 WINBASEAPI WINBOOL WINAPI SetEvent (HANDLE hEvent); 48 WINBASEAPI WINBOOL WINAPI ResetEvent (HANDLE hEvent); 49 WINBASEAPI WINBOOL WINAPI ReleaseSemaphore (HANDLE hSemaphore, LONG lReleaseCount, LPLONG lpPreviousCount); 50 WINBASEAPI WINBOOL WINAPI ReleaseMutex (HANDLE hMutex); 51 WINBASEAPI DWORD WINAPI WaitForSingleObjectEx (HANDLE hHandle, DWORD dwMilliseconds, WINBOOL bAlertable); 52 WINBASEAPI DWORD WINAPI WaitForMultipleObjectsEx (DWORD nCount, CONST HANDLE *lpHandles, WINBOOL bWaitAll, DWORD dwMilliseconds, WINBOOL bAlertable); 53 WINBASEAPI HANDLE WINAPI OpenMutexW (DWORD dwDesiredAccess, WINBOOL bInheritHandle, LPCWSTR lpName); 54 WINBASEAPI HANDLE WINAPI OpenEventA (DWORD dwDesiredAccess, WINBOOL bInheritHandle, LPCSTR lpName); 55 WINBASEAPI HANDLE WINAPI OpenEventW (DWORD dwDesiredAccess, WINBOOL bInheritHandle, LPCWSTR lpName); 56 WINBASEAPI HANDLE WINAPI OpenSemaphoreW (DWORD dwDesiredAccess, WINBOOL bInheritHandle, LPCWSTR lpName); 57 WINBOOL WINAPI WaitOnAddress (volatile VOID *Address, PVOID CompareAddress, SIZE_T AddressSize, DWORD dwMilliseconds); 58 VOID WINAPI WakeByAddressSingle (PVOID Address); 59 VOID WINAPI WakeByAddressAll (PVOID Address); 60 #if _WIN32_WINNT >= 0x0600 61 #define CREATE_MUTEX_INITIAL_OWNER 0x1 62 63 #define CREATE_EVENT_MANUAL_RESET 0x1 64 #define CREATE_EVENT_INITIAL_SET 0x2 65 66 WINBASEAPI VOID WINAPI InitializeSRWLock (PSRWLOCK SRWLock); 67 VOID WINAPI ReleaseSRWLockExclusive (PSRWLOCK SRWLock); 68 VOID WINAPI ReleaseSRWLockShared (PSRWLOCK SRWLock); 69 VOID WINAPI AcquireSRWLockExclusive (PSRWLOCK SRWLock); 70 VOID WINAPI AcquireSRWLockShared (PSRWLOCK SRWLock); 71 WINBASEAPI BOOLEAN WINAPI TryAcquireSRWLockExclusive (PSRWLOCK SRWLock); 72 WINBASEAPI BOOLEAN WINAPI TryAcquireSRWLockShared (PSRWLOCK SRWLock); 73 WINBASEAPI WINBOOL WINAPI InitializeCriticalSectionEx (LPCRITICAL_SECTION lpCriticalSection, DWORD dwSpinCount, DWORD Flags); 74 WINBASEAPI VOID WINAPI InitOnceInitialize (PINIT_ONCE InitOnce); 75 WINBASEAPI WINBOOL WINAPI InitOnceExecuteOnce (PINIT_ONCE InitOnce, PINIT_ONCE_FN InitFn, PVOID Parameter, LPVOID *Context); 76 WINBASEAPI WINBOOL WINAPI InitOnceBeginInitialize (LPINIT_ONCE lpInitOnce, DWORD dwFlags, PBOOL fPending, LPVOID *lpContext); 77 WINBASEAPI WINBOOL WINAPI InitOnceComplete (LPINIT_ONCE lpInitOnce, DWORD dwFlags, LPVOID lpContext); 78 WINBASEAPI VOID WINAPI InitializeConditionVariable (PCONDITION_VARIABLE ConditionVariable); 79 WINBASEAPI VOID WINAPI WakeConditionVariable (PCONDITION_VARIABLE ConditionVariable); 80 WINBASEAPI VOID WINAPI WakeAllConditionVariable (PCONDITION_VARIABLE ConditionVariable); 81 WINBASEAPI WINBOOL WINAPI SleepConditionVariableCS (PCONDITION_VARIABLE ConditionVariable, PCRITICAL_SECTION CriticalSection, DWORD dwMilliseconds); 82 WINBASEAPI WINBOOL WINAPI SleepConditionVariableSRW (PCONDITION_VARIABLE ConditionVariable, PSRWLOCK SRWLock, DWORD dwMilliseconds, ULONG Flags); 83 WINBASEAPI HANDLE WINAPI CreateMutexExA (LPSECURITY_ATTRIBUTES lpMutexAttributes, LPCSTR lpName, DWORD dwFlags, DWORD dwDesiredAccess); 84 WINBASEAPI HANDLE WINAPI CreateMutexExW (LPSECURITY_ATTRIBUTES lpMutexAttributes, LPCWSTR lpName, DWORD dwFlags, DWORD dwDesiredAccess); 85 WINBASEAPI HANDLE WINAPI CreateEventExA (LPSECURITY_ATTRIBUTES lpEventAttributes, LPCSTR lpName, DWORD dwFlags, DWORD dwDesiredAccess); 86 WINBASEAPI HANDLE WINAPI CreateEventExW (LPSECURITY_ATTRIBUTES lpEventAttributes, LPCWSTR lpName, DWORD dwFlags, DWORD dwDesiredAccess); 87 WINBASEAPI HANDLE WINAPI CreateSemaphoreExW (LPSECURITY_ATTRIBUTES lpSemaphoreAttributes, LONG lInitialCount, LONG lMaximumCount, LPCWSTR lpName, DWORD dwFlags, DWORD dwDesiredAccess); 88 89 #define CreateMutexEx __MINGW_NAME_AW(CreateMutexEx) 90 #define CreateEventEx __MINGW_NAME_AW(CreateEventEx) 91 #ifdef UNICODE 92 #define CreateSemaphoreEx CreateSemaphoreExW 93 #endif 94 #endif 95 96 #ifdef UNICODE 97 #define OpenMutex OpenMutexW 98 #define OpenSemaphore OpenSemaphoreW 99 #endif 100 #define OpenEvent __MINGW_NAME_AW(OpenEvent) 101 102 typedef VOID (APIENTRY *PTIMERAPCROUTINE) (LPVOID lpArgToCompletionRoutine, DWORD dwTimerLowValue, DWORD dwTimerHighValue); 103 104 typedef RTL_BARRIER SYNCHRONIZATION_BARRIER; 105 typedef PRTL_BARRIER PSYNCHRONIZATION_BARRIER; 106 typedef PRTL_BARRIER LPSYNCHRONIZATION_BARRIER; 107 108 #define SYNCHRONIZATION_BARRIER_FLAGS_SPIN_ONLY 0x01 109 #define SYNCHRONIZATION_BARRIER_FLAGS_BLOCK_ONLY 0x02 110 #define SYNCHRONIZATION_BARRIER_FLAGS_NO_DELETE 0x04 111 112 WINBASEAPI VOID WINAPI InitializeCriticalSection (LPCRITICAL_SECTION lpCriticalSection); 113 WINBASEAPI WINBOOL WINAPI InitializeCriticalSectionAndSpinCount (LPCRITICAL_SECTION lpCriticalSection, DWORD dwSpinCount); 114 WINBASEAPI DWORD WINAPI SetCriticalSectionSpinCount (LPCRITICAL_SECTION lpCriticalSection, DWORD dwSpinCount); 115 WINBASEAPI DWORD WINAPI WaitForSingleObject (HANDLE hHandle, DWORD dwMilliseconds); 116 WINBASEAPI DWORD WINAPI SleepEx (DWORD dwMilliseconds, WINBOOL bAlertable); 117 WINBASEAPI HANDLE WINAPI CreateMutexA (LPSECURITY_ATTRIBUTES lpMutexAttributes, WINBOOL bInitialOwner, LPCSTR lpName); 118 WINBASEAPI HANDLE WINAPI CreateMutexW (LPSECURITY_ATTRIBUTES lpMutexAttributes, WINBOOL bInitialOwner, LPCWSTR lpName); 119 WINBASEAPI HANDLE WINAPI CreateEventA (LPSECURITY_ATTRIBUTES lpEventAttributes, WINBOOL bManualReset, WINBOOL bInitialState, LPCSTR lpName); 120 WINBASEAPI HANDLE WINAPI CreateEventW (LPSECURITY_ATTRIBUTES lpEventAttributes, WINBOOL bManualReset, WINBOOL bInitialState, LPCWSTR lpName); 121 WINBASEAPI WINBOOL WINAPI SetWaitableTimer (HANDLE hTimer, const LARGE_INTEGER *lpDueTime, LONG lPeriod, PTIMERAPCROUTINE pfnCompletionRoutine, LPVOID lpArgToCompletionRoutine, WINBOOL fResume); 122 WINBASEAPI WINBOOL WINAPI CancelWaitableTimer (HANDLE hTimer); 123 WINBASEAPI HANDLE WINAPI OpenWaitableTimerW (DWORD dwDesiredAccess, WINBOOL bInheritHandle, LPCWSTR lpTimerName); 124 WINBOOL WINAPI EnterSynchronizationBarrier (LPSYNCHRONIZATION_BARRIER lpBarrier, DWORD dwFlags); 125 WINBOOL WINAPI InitializeSynchronizationBarrier (LPSYNCHRONIZATION_BARRIER lpBarrier, LONG lTotalThreads, LONG lSpinCount); 126 WINBOOL WINAPI DeleteSynchronizationBarrier (LPSYNCHRONIZATION_BARRIER lpBarrier); 127 WINBASEAPI VOID WINAPI Sleep (DWORD dwMilliseconds); 128 WINBASEAPI DWORD WINAPI SignalObjectAndWait (HANDLE hObjectToSignal, HANDLE hObjectToWaitOn, DWORD dwMilliseconds, WINBOOL bAlertable); 129 #if _WIN32_WINNT >= 0x0600 130 #define CREATE_WAITABLE_TIMER_MANUAL_RESET 0x1 131 WINBASEAPI HANDLE WINAPI CreateWaitableTimerExW (LPSECURITY_ATTRIBUTES lpTimerAttributes, LPCWSTR lpTimerName, DWORD dwFlags, DWORD dwDesiredAccess); 132 133 #ifdef UNICODE 134 #define CreateWaitableTimerEx CreateWaitableTimerExW 135 #endif 136 #endif 137 138 #if _WIN32_WINNT >= 0x0601 139 WINBOOL WINAPI SetWaitableTimerEx (HANDLE hTimer, const LARGE_INTEGER *lpDueTime, LONG lPeriod, PTIMERAPCROUTINE pfnCompletionRoutine, LPVOID lpArgToCompletionRoutine, PREASON_CONTEXT WakeContext, ULONG TolerableDelay); 140 #endif 141 142 #define CreateMutex __MINGW_NAME_AW(CreateMutex) 143 #define CreateEvent __MINGW_NAME_AW(CreateEvent) 144 145 #ifdef UNICODE 146 #define OpenWaitableTimer OpenWaitableTimerW 147 #endif 148 149 #ifdef __cplusplus 150 } 151 #endif 152 #endif 153