Voltar à lista
Linux x86_64IPC & sincronização#455

futex_wait

Versão simplificada e mais rápida de futex(FUTEX_WAIT), com uma API dedicada em vez de multiplexada.

Descrição

Contraparte de espera de `futex_wake`, parte da mesma reforma de API.

man 2Desde o kernel 6.7

Assinatura

int futex_wait(
    void * uaddr,
    unsigned long val,
    unsigned long mask,
    unsigned int flags,
    struct __kernel_timespec * timeout,
    clockid_t clockid
);

Parâmetros

ParâmetroTipoDescrição
uaddrvoid *Endereço da palavra futex.
valunsigned longValor esperado em *uaddr para que a chamada durma.
maskunsigned longMáscara de bits usada ao ser acordado seletivamente.
flagsunsigned intFlags de tamanho/privacidade do futex.
timeoutstruct __kernel_timespec *Timeout opcional.
clockidclockid_tRelógio usado para interpretar `timeout`.

Registradores (x86_64)

RegistradorPapelArgumento
raxnúmero da syscall (chamada) / valor de retorno (após SYSCALL)
rdiargumento 1uaddrvoid *
rsiargumento 2valunsigned long
rdxargumento 3maskunsigned long
r10argumento 4flagsunsigned int
r8argumento 5timeoutstruct __kernel_timespec *
r9argumento 6clockidclockid_t

Valor de retorno

0 em sucesso; -1 em erro, com errno definido.

Códigos de erro (errno)

EAGAIN(11)
Recurso temporariamente indisponível (tente novamente); também conhecido como EWOULDBLOCK.
EINTR(4)
Chamada interrompida por um sinal.
EINVAL(22)
Argumento inválido.
ETIMEDOUT(110)
Conexão expirou (timeout).

Relacionadas