Der Systemaufruf semop()


Prototyp:
int semop(int id, struct sembuf *ops, int count);

Effekt:
Der Systemaufruf semop() manipuliert Semaphorwerte durch eine Gruppe von P- und V-Operationen. Führt mindestens eine der P-Operationen zur Blockierung, so wird der Prozeß blockiert und vorerst keine der Operationen ausgeführt.

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

Parameter:

Rückgabe:
Wert des Semaphors, auf den die letzte Semaphoroperation in ops zugreift, bevor diese Operation stattfand, oder -1 bei Fehler.

Beispiele:
int semid1; /* Identifikatoren für Semaphorgruppe */
struct sembuf sem_p[2]; /* für P-Operationen auf den Semaphoren */
struct sembuf sem_v[2]; /* für V-Operationen auf den Semaphoren */

/* Annahme: semid1 zeigt auf eine Gruppe von zwei Semaphoren */

/* Vorbereitung der P-Operationen */
sem_p[0].sem_num = 0;
sem_p[1].sem_num = 1;
/* Setzen der Op. "Dekrementieren der Semaphorwerte" */
sem_p[0].sem_op = -2;
sem_p[1].sem_op = -1;
/* Setzen der Flags */
sem_p[0].sem_flg =sem_p[1].sem_flg = 0;

/* Vorbereitung der V-Operationen */
sem_v[0].sem_num = 0;
sem_v[1].sem_num = 1;
/* Setzen der Op. "Inkrementieren der Semaphorwerte" */
sem_v[0].sem_op = 2;
sem_v[1].sem_op = 3;
/* Setzen der Flags */
sem_v[0].sem_flg =sem_v[1].sem_flg = 0;

semop(semid1, sem_v, 1);
/* V-Operation auf ersten Semaphor */

semop(semid1, sem_v, 2);
/* V-Operation auf beide Semaphore */

semop(semid1, sem_p, 2);
/* P-Operation auf beide Semaphor */

semop(semid1, sem_p, 1);
/* P-Operation auf ersten Semaphor */

semop(semid1, &sem_v[1], 1);
/* P-Operation auf zweiten Semaphor */

Wenn Sie die Prozesse in dem unteren Feld der Graphik mit der Maus anklicken, werden die Beispiele demonstriert.



FH-Köln hoch zurück weiter