Semop
The Single UNIX ® Specification, Version 2Copyright © 1997 The Open Group
Name
Semop - semaphore operations
Synopsis
#include <sys/sem.h> int semop(int semid, struct sembuf *sops, size_t nsops);
Description
La funzione semop() è utilizzata per eseguire in maniera atomica un array definito dall'utente di operazioni sui semafori associati con l'identificatore del semaforo specificato dall'argomento semid.
L'argomento sops è un puntatore a un array definito dall'utente di strutture di operazioni sui semafori. L'implementazione non modificherà gli elementi di questo array a meno che l'applicazione utilizzi estensioni dipendenti dall'implementazione.
L'argomento nsops è il numero di tali strutture nell'array.
Ogni struttura include i seguenti membri:
- sembuf, Member Type Member Name Description
- short sem_num - semaphore number
- short sem_op - semaphore operation
- short sem_flg - operation flags
Ogni operazione del semaforo specificata da sem_op viene eseguita sul corrispondente semaforo specificato da semid e sem_num.
La variabile sem_op specifica una delle tre operazioni del semaforo:
- Se sem_op è un numero intero negativo e il processo chiamante ha il permesso di alterare, una delle seguenti condizioni si verificherà:
- Se semval, in base a
<sys/sem.h>, è maggiore o uguale al valore assoluto di sem_op, il valore assoluto di sem_op viene sottratto da semval. Inoltre, se (sem_flg&SEM_UNDO) è diverso da zero, il valore assoluto di sem_op viene aggiunto al valore semadj del processo chiamante per il semaforo specificato. - Se semval è minore del valore assoluto di sem_op e (sem_flg&IPC_NOWAIT) è diverso da zero, semop() ritornerà immediatamente.
- Se semval è minore del valore assoluto di sem_op e (sem_flg&IPC_NOWAIT) è zero, semop() incrementerà il semncnt associato con il semaforo specificato e sospenderà l'esecuzione del thread chiamante fino a quando una delle seguenti condizioni si verifica:
-
Sistemi operativi - Syscall fork
-
Sistemi operativi - Syscall fprintf
-
Sistemi operativi - Syscall memcpy
-
Sistemi operativi - Syscall msgsnd