pub fn futex_wait(
word: &AtomicU32,
expected: u32,
timeout: Option<Duration>,
scope: FutexScope,
) -> Result<(), Errno>Expand description
futex(2) FUTEX_WAIT : bloque le thread courant tant que word == expected.
L’appelant fournit un mot futex AtomicU32 et la valeur expected qu’il
vient d’observer. Le noyau revérifie *word == expected atomiquement
avant de s’endormir : si la valeur a déjà changé entre la lecture de l’appelant
et l’entrée dans le syscall, l’attente est inutile et renvoie immédiatement
Errno::EAGAIN (c’est l’élimination de la course « réveil perdu »).
timeout = None→ attente indéfinie (timespecNULL).timeout = Some(d)→ attente bornée relative (FUTEX_WAITmesure contreCLOCK_MONOTONIC) ;Duration::ZERO= sondage immédiat.scope→FutexScope::Private(défaut, intra-processus) ouFutexScope::Shared(mémoire partagée). Doit être cohérent avec lefutex_wakecorrespondant.
Retour : Ok(()) quand le thread a été réveillé par un futex_wake (ou un
réveil spurious — l’appelant relit toujours *word après retour).
§Errors
Errno::EAGAIN:*word != expectedau moment de l’appel — aucune attente n’a eu lieu (réveil perdu évité).Errno::EINTR: un signal a interrompu l’attente — remonté tel quel (ADR-021 §2), aucune reprise automatique en couche 0.Errno::ETIMEDOUT: l’échéancetimeouta expiré avant tout réveil.Errno::EFAULT: pointeur invalide — inatteignable via cette API safe (wordest une référence vivante,timeoutun local vivant ouNULL).