/* * multithread.h -- en-tête réduit remplaçant celui de GNU Backgammon. * * Copyright (C) 2026 les auteurs d'Ustagammon. * Licence : GPLv3 ou ultérieure (voir LICENSE). * * Le moteur embarqué est compilé sans USE_MULTITHREAD (ADR 0005). Ne restent * que les définitions de la branche monothread de l'original : les macros * MT_* et les données locales au fil unique (td.tld). */ #ifndef MULTITHREAD_H #define MULTITHREAD_H #include "config.h" #if defined(USE_MULTITHREAD) #error "Le moteur embarqué d'Ustagammon est compilé sans threads" #endif #include "backgammon.h" #define multi_debug(x) typedef struct { int id; move *aMoves; NNState *pnnState; } ThreadLocalData; typedef struct { ThreadLocalData *tld; } ThreadData; extern ThreadData td; /* Définies dans mtsupport.c (branche sans threads). */ extern void MT_InitThreads(void); extern void MT_Close(void); extern ThreadLocalData *MT_CreateThreadLocalData(int id); #if !defined(MAX_NUMTHREADS) #define MAX_NUMTHREADS 1 #endif extern int asyncRet; #define MT_Exclusive() {} #define MT_Release() {} #define MT_GetNumThreads() 1 #define MT_SetResultFailed() asyncRet = -1 #define MT_SafeInc(x) (++(*x)) #define MT_SafeIncValue(x) (++(*x)) #define MT_SafeIncCheck(x) ((*x)++) #define MT_SafeAdd(x, y) ((*x) += y) #define MT_SafeDec(x) (--(*x)) #define MT_SafeDecCheck(x) ((--(*x)) == 0) #define MT_SafeGet(x) (*x) #define MT_SafeSet(x, y) ((*x) = y) #define MT_SafeCompare(x, y) ((*x) == y) #define MT_GetThreadID() 0 #define MT_Get_nnState() td.tld->pnnState #define MT_Get_aMoves() td.tld->aMoves #define MT_GetTLD() td.tld #endif