mirror of
https://github.com/sockspls/badfish
synced 2025-04-29 16:23:09 +00:00
Readd SRWLOCK and Condition Variables under Windows
And set them as default. Introduce compile switch OLD_LOCKS to allow to fallback on compatible locks supported by Windows XP and older versions. No functional change. Signed-off-by: Marco Costalba <mcostalba@gmail.com>
This commit is contained in:
parent
22ede4442c
commit
5973e09854
2 changed files with 25 additions and 0 deletions
21
src/lock.h
21
src/lock.h
|
@ -44,6 +44,25 @@ typedef pthread_cond_t WaitCondition;
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
#undef WIN32_LEAN_AND_MEAN
|
#undef WIN32_LEAN_AND_MEAN
|
||||||
|
|
||||||
|
// Default fast and race free locks and condition variables
|
||||||
|
#if !defined(OLD_LOCKS)
|
||||||
|
|
||||||
|
typedef SRWLOCK Lock;
|
||||||
|
typedef CONDITION_VARIABLE WaitCondition;
|
||||||
|
|
||||||
|
# define lock_init(x) InitializeSRWLock(x)
|
||||||
|
# define lock_grab(x) AcquireSRWLockExclusive(x)
|
||||||
|
# define lock_release(x) ReleaseSRWLockExclusive(x)
|
||||||
|
# define lock_destroy(x) (x)
|
||||||
|
# define cond_destroy(x) (x)
|
||||||
|
# define cond_init(x) InitializeConditionVariable(x)
|
||||||
|
# define cond_signal(x) WakeConditionVariable(x)
|
||||||
|
# define cond_wait(x,y) SleepConditionVariableSRW(x, y, INFINITE,0)
|
||||||
|
|
||||||
|
// Fallback solution to build for Windows XP and older versions, note that
|
||||||
|
// cond_wait() is racy between lock_release() and WaitForSingleObject().
|
||||||
|
#else
|
||||||
|
|
||||||
typedef CRITICAL_SECTION Lock;
|
typedef CRITICAL_SECTION Lock;
|
||||||
typedef HANDLE WaitCondition;
|
typedef HANDLE WaitCondition;
|
||||||
|
|
||||||
|
@ -57,4 +76,6 @@ typedef HANDLE WaitCondition;
|
||||||
# define cond_wait(x,y) { lock_release(y); WaitForSingleObject(*x, INFINITE); lock_grab(y); }
|
# define cond_wait(x,y) { lock_release(y); WaitForSingleObject(*x, INFINITE); lock_grab(y); }
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif // !defined(LOCK_H_INCLUDED)
|
#endif // !defined(LOCK_H_INCLUDED)
|
||||||
|
|
|
@ -70,6 +70,10 @@ typedef uint64_t Bitboard;
|
||||||
//// -DUSE_POPCNT | Add runtime support for use of popcnt asm-instruction.
|
//// -DUSE_POPCNT | Add runtime support for use of popcnt asm-instruction.
|
||||||
//// | Works only in 64-bit mode. For compiling requires hardware
|
//// | Works only in 64-bit mode. For compiling requires hardware
|
||||||
//// | with popcnt support. Around 4% speed-up.
|
//// | with popcnt support. Around 4% speed-up.
|
||||||
|
////
|
||||||
|
//// -DOLD_LOCKS | By default under Windows are used the fast Slim Reader/Writer (SRW)
|
||||||
|
//// | Locks and Condition Variables: these are not supported by Windows XP
|
||||||
|
//// | and older, to compile for those platforms you should enable OLD_LOCKS.
|
||||||
|
|
||||||
// Automatic detection for 64-bit under Windows
|
// Automatic detection for 64-bit under Windows
|
||||||
#if defined(_WIN64)
|
#if defined(_WIN64)
|
||||||
|
|
Loading…
Add table
Reference in a new issue