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
| 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. |