Expand description
Famille futex — blocage/réveil noyau sur un mot 32 bits (futex(2)).
Ajoutée par ADR-048 (descellement unique de la couche 0 : std-free +
futex(2), re-sceau couche-0-v1.6) pour fournir la primitive de
synchronisation std-free dont dépendent la libc Air (air-thread, couche 1)
et le mutex interne de l’état io_uring partagé de la couche 0 (qui remplace
ainsi son dernier std::sync::Mutex). Cf. docs/specs/layer-0/family-futex.md.
Doctrine « kernel = bible », alignée sur la famille poll (ADR-044) :
futex(2)classique (SYS_futex) sur unAtomicU32de l’appelant — distinct du futex via io_uring (trop lourd pour unMutexbasique, cf. ADR-048 alternatives écartées).- Une fonction typée par opération (ADR-021 §3) :
futex_waitetfutex_wake. Aucun multiplexeurfutex(op, …)exposé ; l’opbrut reste un détail interne du wrapper asm. EINTRremonté, jamais de retry (ADR-021 §2) : une attente interrompue par un signal renvoie [Errno::EINTR] tel quel ; la reprise (échéance recalculée) vit en couche 1. Le wrapper ne contient aucune boucle.- Portée et compte typés (pas de drapeau brut) : [
FutexScope] (privé par défaut) et [FutexWakeCount] (borné àINT_MAXpar construction). - Pas d’allocation (Principe 4) : le mot est emprunté (
&AtomicU32), le timeout est unKernelTimespecde pile (réutilisé depoll). Errno =NonZeroI32.
Functions§
- futex_
wait futex(2)FUTEX_WAIT: bloque le thread courant tant queword == expected.- futex_
wake futex(2)FUTEX_WAKE: réveille jusqu’àcountwaiters bloqués surword.