Linux x86_64IPC & sincronização#65
semop
Executa um conjunto de operações atômicas sobre semáforos System V.
Descrição
As operações são aplicadas atomicamente (tudo ou nada), o que permite implementar seções críticas complexas envolvendo múltiplos semáforos sem condição de corrida.
Header:
sys/sem.hman 2Assinatura
int semop(int semid, struct sembuf * sops, size_t nsops);Parâmetros
| Parâmetro | Tipo | Descrição |
|---|---|---|
| semid | int | Identificador do conjunto de semáforos. |
| sops | struct sembuf * | Array de operações a executar. |
| nsops | size_t | Número de operações em `sops`. |
Registradores (x86_64)
| Registrador | Papel | Argumento |
|---|---|---|
| rax | número da syscall (chamada) / valor de retorno (após SYSCALL) | — |
| rdi | argumento 1 | semidint |
| rsi | argumento 2 | sopsstruct sembuf * |
| rdx | argumento 3 | nsopssize_t |
Valor de retorno
0 em sucesso; -1 em erro, com errno definido.
Códigos de erro (errno)
- E2BIG(7)
- Lista de argumentos grande demais.
- EACCES(13)
- Permissão negada.
- EAGAIN(11)
- Recurso temporariamente indisponível (tente novamente); também conhecido como EWOULDBLOCK.
- EFBIG(27)
- Arquivo grande demais.
- EIDRM(43)
- Identificador removido (IPC System V).
- EINTR(4)
- Chamada interrompida por um sinal.
- EINVAL(22)
- Argumento inválido.