Voltar à lista
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.3

Assinatura

int membarrier(int cmd, int flags, int cpu_id);

Parâmetros

ParâmetroTipoDescrição
cmdintMEMBARRIER_CMD_GLOBAL, MEMBARRIER_CMD_PRIVATE_EXPEDITED, etc.
flagsintFlags específicas do comando; geralmente 0.
cpu_idintCPU específica alvo, para comandos que suportam essa granularidade; -1 caso contrário.

Registradores (x86_64)

RegistradorPapelArgumento
raxnúmero da syscall (chamada) / valor de retorno (após SYSCALL)
rdiargumento 1cmdint
rsiargumento 2flagsint
rdxargumento 3cpu_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).

Relacionadas