next up previous
Next: Exemplo de operação sobre Up: Os Semáforos Previous: A Função semctl()

A Função semop()

  
  # include <sys/types.h>
  # include <sys/ipc.h>
  # include <sys/sem.h>

  int semop ( int semid, struct sembuf *sops, unsigned nsops )

Valor de retorno: o valor de semval do último semáforo manipulado ou -1 em caso de erro.

A função semop() permite de efetuar operações sobre os semáforos identificado por semid. Cada um dos (nsops) elementos no array de estruturas do tipo struct sembuf apontado por sops especifica uma operação a ser realizada no semáforo.

A estrutura sembuf (ver seção 5.2.1) especifica o número do semáforo que será tratado (sem_num), a operação que será realizada sobre este semáforo(sem_op), e os flags de controle da operação (sem_flag).

O tipo de operação realizada vai depender do valor armazenado no membro sem_op:

Quando as operações semop() no semáforo utilizarem apenas os valores de sem_op iguais a 1 ou -1, tem-se o funcionamento dos semáforos conhecidos como semáforos de Dijsktra (veja seção 5.6).

Existem entretanto uma gama de operações possíveis utilizando sem_op. A implementação torna-se nesse caso muito mais complexa e a demonstração das garantias de exclusão mútua entre as operações é extremamente delicada.

Os flags reconhecidos em sem_flg são IPC_NOWAIT e SEM_UNDO. Se a operação coloca SEM_UNDO como flag, ele será desfeita quando o processo termina (exit()). Em resumo:



Subsections
next up previous
Next: Exemplo de operação sobre Up: Os Semáforos Previous: A Função semctl()
Celso Alberto Saibel Santos 2000-11-14