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âmetro | Tipo | Descrição |
|---|---|---|
| waiters | struct futex_waitv[2] | Descreve o futex de origem e o de destino da operação de requeue. |
| flags | unsigned int | Reservado; deve ser 0. |
| nr_wake | int | Número de waiters a acordar diretamente na origem. |
| nr_requeue | int | Número de waiters a mover para o futex de destino. |
Registradores (x86_64)
| Registrador | Papel | Argumento |
|---|---|---|
| rax | número da syscall (chamada) / valor de retorno (após SYSCALL) | — |
| rdi | argumento 1 | waitersstruct futex_waitv[2] |
| rsi | argumento 2 | flagsunsigned int |
| rdx | argumento 3 | nr_wakeint |
| r10 | argumento 4 | nr_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).