From 378cc549ab442c845ac9d62cc8cef6977073fe4d Mon Sep 17 00:00:00 2001 From: Aargh Rai Date: Sat, 15 Aug 2026 13:55:35 +0530 Subject: md files --- src/engine/thread.c | 12 ++++++++++-- src/engine/threads.c | 16 ++++++++++++++-- 2 files changed, 24 insertions(+), 4 deletions(-) (limited to 'src/engine') diff --git a/src/engine/thread.c b/src/engine/thread.c index 017e9b6..25e583e 100644 --- a/src/engine/thread.c +++ b/src/engine/thread.c @@ -1,8 +1,8 @@ #include "engine/threads.h" #include -void *engine_thread(void *_args) { - struct thread_args *args = (struct thread_args*)_args; +void *child_thread(void *_args) { + struct child_thread_args *args = (struct child_thread_args*)_args; args->stop = 0; int depth = 0; @@ -32,3 +32,11 @@ void *engine_thread(void *_args) { args->stop = 2; } +// DTS requires a root thread which is initialize the search tree, and the +// others who use that search tree. it's as if root_thread is the owner of the +// tree +void *root_thread(void *_args) { + struct root_thread_args *args = (struct root_thread_args*)_args; + args->stop = 0; +} + diff --git a/src/engine/threads.c b/src/engine/threads.c index 5afe155..541efb1 100644 --- a/src/engine/threads.c +++ b/src/engine/threads.c @@ -48,7 +48,7 @@ void threads_go(struct threads *handler) { pthread_create( handler->threads + i, NULL, - engine_thread, + i == 0 ? root_thread : child_thread, handler->args + i ); } @@ -78,10 +78,22 @@ void threads_cleanup(struct threads *handler) { } void __threads_args_init( - struct thread_args* args, + thread_args_t* _args, struct threads *handler, int i ) { + if (i > 0) { + struct child_thread_args *args = _args; + atomic_init(&args->stop, 0); + atomic_init(&args->finished, 0); + args->id = i; + args->position = handler->position; + args->go_args = handler->go_args; + args->message = handler->engine_messages->data[i]; + return; + } + + struct root_thread_args *args = _args; atomic_init(&args->stop, 0); atomic_init(&args->finished, 0); args->id = i; -- cgit v1.2.3