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 14extern "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