mirror of
https://github.com/HChaZZY/Stockfish.git
synced 2025-12-24 19:16:49 +08:00
Destroy wait conditions before exiting
We already do this for locks. Also rename SitIdleEvent in WaitCond to be uniform with Lunix naming. No functional change. Signed-off-by: Marco Costalba <mcostalba@gmail.com>
This commit is contained in:
@@ -27,12 +27,13 @@
|
||||
# include <pthread.h>
|
||||
|
||||
typedef pthread_mutex_t Lock;
|
||||
typedef pthread_cond_t WaitCondition;
|
||||
|
||||
# define lock_init(x) pthread_mutex_init(x, NULL)
|
||||
# define lock_grab(x) pthread_mutex_lock(x)
|
||||
# define lock_release(x) pthread_mutex_unlock(x)
|
||||
# define lock_destroy(x) pthread_mutex_destroy(x)
|
||||
|
||||
# define cond_destroy(x) pthread_cond_destroy(x);
|
||||
|
||||
#else
|
||||
|
||||
@@ -41,11 +42,13 @@ typedef pthread_mutex_t Lock;
|
||||
#undef WIN32_LEAN_AND_MEAN
|
||||
|
||||
typedef CRITICAL_SECTION Lock;
|
||||
typedef HANDLE WaitCondition;
|
||||
|
||||
# define lock_init(x) InitializeCriticalSection(x)
|
||||
# define lock_grab(x) EnterCriticalSection(x)
|
||||
# define lock_release(x) LeaveCriticalSection(x)
|
||||
# define lock_destroy(x) DeleteCriticalSection(x)
|
||||
|
||||
# define cond_destroy(x) CloseHandle(*x);
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
@@ -96,15 +96,8 @@ namespace {
|
||||
int ActiveThreads;
|
||||
volatile bool AllThreadsShouldExit, AllThreadsShouldSleep;
|
||||
Thread threads[MAX_THREADS];
|
||||
|
||||
Lock MPLock, WaitLock;
|
||||
|
||||
#if !defined(_MSC_VER)
|
||||
pthread_cond_t WaitCond[MAX_THREADS];
|
||||
#else
|
||||
HANDLE SitIdleEvent[MAX_THREADS];
|
||||
#endif
|
||||
|
||||
WaitCondition WaitCond[MAX_THREADS];
|
||||
};
|
||||
|
||||
|
||||
@@ -2243,7 +2236,7 @@ split_point_start: // At split points actual search starts from here
|
||||
pthread_cond_wait(&WaitCond[threadID], &WaitLock);
|
||||
lock_release(&WaitLock);
|
||||
#else
|
||||
WaitForSingleObject(SitIdleEvent[threadID], INFINITE);
|
||||
WaitForSingleObject(WaitCond[threadID], INFINITE);
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -2306,10 +2299,6 @@ split_point_start: // At split points actual search starts from here
|
||||
volatile int i;
|
||||
bool ok;
|
||||
|
||||
#if !defined(_MSC_VER)
|
||||
pthread_t pthread[1];
|
||||
#endif
|
||||
|
||||
// Initialize global locks
|
||||
lock_init(&MPLock);
|
||||
lock_init(&WaitLock);
|
||||
@@ -2318,7 +2307,7 @@ split_point_start: // At split points actual search starts from here
|
||||
#if !defined(_MSC_VER)
|
||||
pthread_cond_init(&WaitCond[i], NULL);
|
||||
#else
|
||||
SitIdleEvent[i] = CreateEvent(0, FALSE, FALSE, 0);
|
||||
WaitCond[i] = CreateEvent(0, FALSE, FALSE, 0);
|
||||
#endif
|
||||
|
||||
// Initialize splitPoints[] locks
|
||||
@@ -2343,6 +2332,7 @@ split_point_start: // At split points actual search starts from here
|
||||
{
|
||||
|
||||
#if !defined(_MSC_VER)
|
||||
pthread_t pthread[1];
|
||||
ok = (pthread_create(pthread, NULL, init_thread, (void*)(&i)) == 0);
|
||||
#else
|
||||
ok = (CreateThread(NULL, 0, init_thread, (LPVOID)(&i), 0, NULL) != NULL);
|
||||
@@ -2382,6 +2372,10 @@ split_point_start: // At split points actual search starts from here
|
||||
|
||||
lock_destroy(&WaitLock);
|
||||
lock_destroy(&MPLock);
|
||||
|
||||
// Now we can safely destroy the wait conditions
|
||||
for (int i = 0; i < MAX_THREADS; i++)
|
||||
cond_destroy(&WaitCond[i]);
|
||||
}
|
||||
|
||||
|
||||
@@ -2579,7 +2573,7 @@ split_point_start: // At split points actual search starts from here
|
||||
pthread_cond_signal(&WaitCond[threadID]);
|
||||
pthread_mutex_unlock(&WaitLock);
|
||||
#else
|
||||
SetEvent(SitIdleEvent[threadID]);
|
||||
SetEvent(WaitCond[threadID]);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user