Sistemas Operacionais

Chamada de Sistema: semop()


SINÓPSE

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

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

 

DESCRIÇÃO

A chamada de sistema semop() permite a execução de uma série de operações sobre um semid (ID de semáforo) específico. A estrutura sembuf aponta para um vetor de operações que devem ser executadas. nsops indica o número de operações a serem executadas, ou seja, o número de estruturas sembuf existentes no vetor (ambos são equivalente).

A estrutura sembuf contém pelo menos os seguintes elementos:

short sem_num;  /* numero do semaforo */
short sem_op;   /* operacao a ser realizada sobre o semaforo */
short sem_flg;  /* flags da operacao */

onde sem_num é o semáforo dentro do conjunto a ser operado. sem_op é a operação a ser executada. sem_flg constitui um conjunto de flags associado com a operação.

A lista de operações somente será executada se e somente se todas forem bem sucedidas. Com o propósito dos experimentos, o conjunto somente contém um semáforo e somente uma operação será feita em um determinado instante, então esta propriedade de várias operações não será usada.

Para um semáforo binário, um que pode ser travado ou destravado, utilizar a operação de -1 para travar e 1 para destravar. Veja as páginas do manual para definições detalhadas das operações que podem ser executadas num semáforo.

Veja o Experimento #5 para maiores informações sobre semáforos.

 

EXEMPLO

Para travar previamente um semáforo criando com o ID 4:

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

...

int sem_id;
struct sembuf lock_sembuf[1];

lock_sembuf[0].sem_num   =  0;
lock_sembuf[0].sem_op    = -1;
lock_sembuf[0].sem_flg   =  0;

...

sem_id = 4;

...

if( semop( sem_id, lock_sembuf, 1 ) == -1 )
{
	perror("semop");
}

 

VEJA TAMBÉM

semget semctl


DISPONÍVEL

AIX, Linux, Lynx, SunOS e Solaris


Para maiores informações sobre este comando, consulte a página do manual de seu sistema operacional (comando man).