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

futex_requeue

Versão simplificada e mais rápida de futex(FUTEX_REQUEUE/FUTEX_CMP_REQUEUE), com uma API dedicada.

Descrição

Move waiters de uma fila de espera futex para outra sem acordá-los — usado para implementar condition variables de forma eficiente, evitando o efeito 'thundering herd'.

man 2Desde o kernel 6.7

Assinatura

int futex_requeue(
    struct futex_waitv[2] waiters,
    unsigned int flags,
    int nr_wake,
    int nr_requeue
);

Parâmetros

ParâmetroTipoDescrição
waitersstruct futex_waitv[2]Descreve o futex de origem e o de destino da operação de requeue.
flagsunsigned intReservado; deve ser 0.
nr_wakeintNúmero de waiters a acordar diretamente na origem.
nr_requeueintNúmero de waiters a mover para o futex de destino.

Registradores (x86_64)

RegistradorPapelArgumento
raxnúmero da syscall (chamada) / valor de retorno (após SYSCALL)
rdiargumento 1waitersstruct futex_waitv[2]
rsiargumento 2flagsunsigned int
rdxargumento 3nr_wakeint
r10argumento 4nr_requeueint

Valor de retorno

Número total de waiters afetados em sucesso; -1 em erro, com errno definido.

Códigos de erro (errno)

EINVAL(22)
Argumento inválido.
EFAULT(14)
Endereço de memória inválido (ponteiro fora do espaço de endereçamento válido).

Relacionadas