Use fast SRWLOCK locks under Windows

They are fast and also have the same semantic of Linux ones.

This allow to simplify the code and especially to use
SleepConditionVariableSRW() to wait on a condition releaseing the lock,
this has the same semantic as pthread_cond_wait().

No functional change.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
This commit is contained in:
Marco Costalba
2010-10-17 11:04:52 +01:00
parent 472971f851
commit 8fdc635255
2 changed files with 18 additions and 21 deletions
+6 -13
View File
@@ -2224,8 +2224,7 @@ split_point_start: // At split points actual search starts from here
// If we are not thinking, wait for a condition to be signaled
// instead of wasting CPU time polling for work.
while ( threadID >= ActiveThreads
|| threads[threadID].state == THREAD_INITIALIZING)
while (threadID >= ActiveThreads || threads[threadID].state == THREAD_INITIALIZING)
{
assert(!sp);
assert(threadID != 0);
@@ -2235,14 +2234,12 @@ split_point_start: // At split points actual search starts from here
threads[threadID].state = THREAD_AVAILABLE;
#if !defined(_MSC_VER)
lock_grab(&WaitLock);
if (threadID >= ActiveThreads)
pthread_cond_wait(&WaitCond[threadID], &WaitLock);
if (threadID >= ActiveThreads || threads[threadID].state == THREAD_INITIALIZING)
cond_wait(&WaitCond[threadID], &WaitLock);
lock_release(&WaitLock);
#else
WaitForSingleObject(WaitCond[threadID], INFINITE);
#endif
}
// If this thread has been assigned work, launch a search
@@ -2305,11 +2302,7 @@ split_point_start: // At split points actual search starts from here
lock_init(&WaitLock);
for (i = 0; i < MAX_THREADS; i++)
#if !defined(_MSC_VER)
pthread_cond_init(&WaitCond[i], NULL);
#else
WaitCond[i] = CreateEvent(0, FALSE, FALSE, 0);
#endif
cond_init(&WaitCond[i]);
// Initialize splitPoints[] locks
for (i = 0; i < MAX_THREADS; i++)