Linux x86_64IPC & sincronização#454
futex_wake
Versão simplificada e mais rápida de futex(FUTEX_WAKE), com uma API dedicada em vez de multiplexada.
Descrição
Parte de uma reforma da API de futex que separa cada operação em uma syscall própria, mais simples de otimizar e verificar do que a antiga interface multiplexada por `futex_op`.
man 2Desde o kernel 6.7
Assinatura
int futex_wake(void * uaddr, unsigned long mask, int nr, unsigned int flags);Parâmetros
| Parâmetro | Tipo | Descrição |
|---|---|---|
| uaddr | void * | Endereço da palavra futex. |
| mask | unsigned long | Máscara de bits para acordar seletivamente apenas waiters compatíveis. |
| nr | int | Número máximo de waiters a acordar. |
| flags | unsigned int | Flags de tamanho/privacidade do futex. |
Registradores (x86_64)
| Registrador | Papel | Argumento |
|---|---|---|
| rax | número da syscall (chamada) / valor de retorno (após SYSCALL) | — |
| rdi | argumento 1 | uaddrvoid * |
| rsi | argumento 2 | maskunsigned long |
| rdx | argumento 3 | nrint |
| r10 | argumento 4 | flagsunsigned int |
Valor de retorno
Número de waiters acordados 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).