Files
Ustagammon/engine/compat/multithread.h
Pierre MARTINandClaude Opus 5.5 42bfb6506d Couche de compatibilité : shim GLib et en-têtes réduits
engine/compat/ remplace ce que le cœur de gnubg attend du reste de gnubg
et de GLib : config.h écrit à la main (sans threads, C générique, NEON
prévu), shim GLib minimal (dont un analyseur XML pour les tables d'équité
et mmap pour les bases de fin de partie), en-têtes réduits et fonctions de
support.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-02 13:56:29 +01:00

65 lines
1.6 KiB
C

/*
* 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