#ifndef ENGINE_THREADS_H #define ENGINE_THREADS_H #include #include #include "bitboard.h" #include "ipc/engine_message.h" #include "ipc/go_args.h" struct thread_args { // signal sent by threads manager atomic_int stop; // signal sent by thread atomic_int finished; int id; position_t *position; go_args_t *go_args; engine_message_handler_t *message; }; struct threads { pthread_t *threads; struct thread_args *args; size_t count; size_t capacity; int running_count; engine_messages_t *engine_messages; go_args_t *go_args; position_t *position; }; #ifdef ENGINE_THREADS_INTERNAL void __threads_args_init( struct thread_args* args, struct threads *handler, int i ); #endif void threads_init(struct threads *handler, size_t capacity); void threads_deinit(struct threads *handler); void threads_reserve(struct threads *handler, size_t capacity); void threads_go(struct threads *handler); bool threads_go_loop(struct threads *handler); bool threads_all_done(struct threads *handler); void threads_cleanup(struct threads *handler); void *engine_thread(void *args); #endif // ENGINE_THREADS_H