Sous-routine sem_init

Objectif

Initialise un sémaphore sans nom.

Bibliothèque

Bibliothèque C standard (libc.a)

Syntaxe

#include <semaphore.h>

int sem_init (sem, pshared, value)
sem_t *sem;
int pshared;
unsigned value;

Descriptif

La sous-routine sem_init initialise le sémaphore sans nom référencé par le paramètre sem . La valeur du sémaphore initialisé est contenue dans le paramètre value . Après un appel réussi à la sous-routine sem_init , le sémaphore peut être utilisé dans les appels ultérieurs à sem_wait, sem_trywait, sem_post, et les sous-routines sem_destroy . Ce sémaphore reste utilisable jusqu'à sa destruction.

Si le paramètre pshared a une valeur différente de zéro, le sémaphore est partagé entre les processus. Dans ce cas, tout processus pouvant accéder au paramètre sem peut l'utiliser pour exécuter sem_wait, sem_trywait, sem_post, et les opérations sem_destroy .

Seul le paramètre sem peut être utilisé pour effectuer la synchronisation.

Si le paramètre pshared est égal à zéro, le sémaphore est partagé entre les unités d'exécution du processus. Toute unité d'exécution de ce processus peut utiliser le paramètre sem pour exécuter sem_wait, sem_trywait, sem_post, et les opérations sem_destroy . L'utilisation du sémaphore par des unités d'exécution autres que celles créées dans le même processus renvoie une erreur.

La tentative d'initialisation d'un sémaphore qui a déjà été initialisé entraîne la perte de l'accès au sémaphore précédent.

Paramètres

Article Descriptif
sem Indique le sémaphore à initialiser.
pshared Détermine si le sémaphore peut être partagé entre les processus ou non.
value Contient la valeur du sémaphore initialisé.

Valeurs renvoyées

Une fois l'opération terminée, la sous-routine sem_init initialise le sémaphore dans le paramètre sem . Sinon, il renvoie -1 et met errno pour indiquer l'erreur.

Codes d'erreur

La sous-routine sem_init échoue si:
Article Descriptif
EFAULT Adresse utilisateur non valide.
EINVAL Le paramètre value dépasse SEM_VALEUR_MAX.
ENFILE Trop de sémaphores sont actuellement ouverts dans le système.
ENOMEM Mémoire insuffisante pour l'opération requise.
ENOSPC Une ressource requise pour initialiser le sémaphore a été épuisée ou la limite sur les sémaphores, SEM_NSEMS_MAX, a été atteinte.
ENOTSUP Cette fonction n'est pas prise en charge avec les processus qui ont été des points de contrôle-restart'ed.