Retire OLD_LOCKS option
authorMarco Costalba <mcostalba@gmail.com>
Sat, 7 Jan 2012 10:17:10 +0000 (11:17 +0100)
committerMarco Costalba <mcostalba@gmail.com>
Sat, 7 Jan 2012 10:18:09 +0000 (11:18 +0100)
And make CRITICAL_SECTION locks the only option for Windows.
This guarantees backward compatibility with all the Windows
versions (even XP and older) and an hassle free experience
when compiling for Windows. Tests performed by Ingo and
reported on talkchess confirm there is no speed penalty
against the most modern SRW locks:

http://www.talkchess.com/forum/viewtopic.php?t=41835&start=20

No functional change.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
src/lock.h
src/types.h

index 3b3de1ac122718843e261597823a3f8661d31bc5..7f74fcf739033caf29ea40d4e26a8f962d1554f1 100644 (file)
@@ -45,26 +45,9 @@ typedef pthread_cond_t WaitCondition;
 #undef WIN32_LEAN_AND_MEAN
 #undef NOMINMAX
 
-// 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)
-#  define cond_timedwait(x,y,z) SleepConditionVariableSRW(x,y,z,0)
-
-// Fallback solution to build for Windows XP and older versions, note that
-// cond_wait() is racy between lock_release() and WaitForSingleObject().
-#else
-
+// We use critical sections on Windows to support Windows XP and older versions,
+// unfortunatly cond_wait() is racy between lock_release() and WaitForSingleObject()
+// but apart from this they have the same speed performance of SRW locks.
 typedef CRITICAL_SECTION Lock;
 typedef HANDLE WaitCondition;
 
@@ -80,6 +63,4 @@ typedef HANDLE WaitCondition;
 
 #endif
 
-#endif
-
 #endif // !defined(LOCK_H_INCLUDED)
index fb938a3084645d2dc02741e12a3c728021def433..0915d685ada89f872d8c91b2871a939384c442ba 100644 (file)
 /// -DUSE_POPCNT  | Add runtime support for use of popcnt asm-instruction. Works
 ///               | only in 64-bit mode. For compiling requires hardware with
 ///               | popcnt support.
-///
-/// -DOLD_LOCKS   | 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.
 
 #include <climits>
 #include <cstdlib>