Int semget

advertisement
Semáforos
Creación de Semaforos (semget)
semget() podemos crear o acceder a un conjunto de semáforos
unidos bajo
un identificador común.
Int semget (key_t key, int nsems, int semflg);
semget
-1
fallo
ID
ejecución satisfactoria
Donde:
Key
es la llave que identifica a que grupo de semáforos
queremos acceder
nsems es el total de semáforos que van a estar agrupados bajo el
identificador devuelto por semget.
Semflg es una máscara de bits que indica el modo de adquisición
del identificador
Control estructura de semáforos (semctl)
Con semctl podemos acceder a la información administrativa y de
control que dispone el núcleo sobre un semáforo.
int semctl(int semid, int semnum, int cmd, arg)
Union semnun{
int val;
struct semid_ds *buf;
ushort *array;
}arg;
La llamada actúa sobre el conjunto de semáforos que responden al
identificador semid devuelto por una llamada previa a semget.
semnum indica cual es el semáforo de los que hay bajo semid, al
que queremos acceder
•GETVAL lee el valor de un semáforo
•SETVAL inicializa un semáforo a un valor determinado
especificado en arg.
•GETPID lee el PID del último proceso que actuó sobre el
semáforo.
cmd
•GETALL permite leer el valor de todos los semáforos
asociados al identificador semid.
•SETALL inicializa el valor de todos los semáforos asociados
al identificador semid.
•IPC_STAT e IPC_SET permite leer y modificar la información
administrativa asociada al identificador semid
•IPC_RMID le indica al núcleo que debe borrar el conjunto de
semáforos agrupados bajo el identificador semid
Operaciones P y V (semop)
Int semop(int semid, struct sembuf *sops, int nsops)
Donde:
sops
es un puntero a un array de estructuras que indican las
operaciones que llevarán a cabo sobre los semáforos.
nsops
es el total de elementos que tiene el arreglo de operaciones.
Cada elemento del array es una estructura del tipo sembuf.
struct sembuf {
sem_num;
//número del semáforos (0≥índice≤N-1)
short sem_op; //operación: P o V
short sem_flg; //máscara de bits
};
• Si sem_op<0 entonces el valor del semáforo se
decrementa, lo que equivale a una operación P
• Si sem_op>0 entonces el valor del semáforo se
incrementa, lo que equivale a una operación V
• Si sem_op=0 entonces el valor del semáforo
no sufre ningún cambio.
Sem_flg
• IPC_NOWAIT la llamada a semop devuelve el control
en caso de que no se pueda satisfacer la operación
especificada en sem_op. La forma de trabajar por
defecto es IPC_WAIT
• SEM_UNDO, la operación se deshace cuando el
proceso termina.
Descargar