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) ou [FutexScope::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).