Linux x86_64Memória#324
membarrier
Emite uma barreira de memória em todas as threads do sistema (ou de um processo), sem precisar enviar sinais.
Descrição
Usada por algoritmos concorrentes lock-free/RCU em espaço de usuário para garantir ordenação de memória entre threads sem o custo de sincronizar explicitamente com cada uma — o kernel força a barreira ao interromper (ou já ter interrompido) cada CPU.
Header:
linux/membarrier.hman 2Desde o kernel 4.3Assinatura
int membarrier(int cmd, int flags, int cpu_id);Parâmetros
| Parâmetro | Tipo | Descrição |
|---|---|---|
| cmd | int | MEMBARRIER_CMD_GLOBAL, MEMBARRIER_CMD_PRIVATE_EXPEDITED, etc. |
| flags | int | Flags específicas do comando; geralmente 0. |
| cpu_id | int | CPU específica alvo, para comandos que suportam essa granularidade; -1 caso contrário. |
Registradores (x86_64)
| Registrador | Papel | Argumento |
|---|---|---|
| rax | número da syscall (chamada) / valor de retorno (após SYSCALL) | — |
| rdi | argumento 1 | cmdint |
| rsi | argumento 2 | flagsint |
| rdx | argumento 3 | cpu_idint |
Valor de retorno
0 (ou uma máscara de comandos suportados, para MEMBARRIER_CMD_QUERY) em sucesso; -1 em erro, com errno definido.
Códigos de erro (errno)
- EINVAL(22)
- Argumento inválido.
- ENOSYS(38)
- Chamada de sistema não implementada nesta versão do kernel.
- EPERM(1)
- Operação não permitida (falta de privilégio).