pthread_mutex_init ou pthread_mutex_destroy Sous-routine

Objectif

Initialise ou détruit un mutex.

Bibliothèque

Bibliothèque d'unités d'exécution (libpthreads.a)

Syntaxe

#include <pthread.h>

int pthread_mutex_init (mutex, attr)
pthread_mutex_t *mutex;
const pthread_mutexattr_t *attr;

int pthread_mutex_destroy (mutex)
pthread_mutex_t *mutex;

Descriptif

La fonction pthread_mutex_init initialise le mutex référencé par mutex avec les attributs spécifiés par attr. Si attr est NULL, les attributs de mutex par défaut sont utilisés ; l'effet est le même que la transmission de l'adresse d'un objet d'attributs de mutex par défaut. Une fois l'initialisation réussie, l'état du mutex est initialisé et déverrouillé.

La tentative d'initialisation d'un processus mutex déjà initialisé entraîne un comportement non défini.

La fonction pthread_mutex_destroy détruit l'objet mutex référencé par le mutex ; l'objet mutex devient, en fait, non initialisé. Une implémentation peut amener pthread_mutex_destroy à définir l'objet référencé par mutex sur une valeur non valide. Un objet mutex détruit peut être réinitialisé à l'aide de pthread_mutex_init; les résultats du référencement de l'objet après sa destruction ne sont pas définis.

Il est prudent de détruire un mutex initialisé qui est déverrouillé. La tentative de destruction d'un mutex verrouillé entraîne un comportement non défini.

Dans les cas où les attributs mutex par défaut sont appropriés, la macro PTHREAD_MUTEX_INITIALIZER peut être utilisée pour initialiser les mutex qui sont alloués de manière statique. L'effet est équivalent à l'initialisation dynamique par un appel à pthread_mutex_init avec le paramètre attr défini sur NULL, sauf qu'aucune vérification des erreurs n'est effectuée.

Paramètres

Article Descriptif
exclusion mutuelle Indique le processus mutex à initialiser ou à supprimer.
attr Indique l'objet d'attributs de processus mutex.

Valeurs renvoyées

Si l'opération aboutit, les fonctions pthread_mutex_init et pthread_mutex_destroy renvoient zéro. Sinon, un numéro d'erreur est renvoyé pour indiquer l'erreur. Les vérifications d'erreur EBUSY et EINVAL agissent comme si elles étaient effectuées immédiatement au début du traitement de la fonction et provoquent un retour d'erreur avant de modifier l'état du mutex spécifié par mutex.

Codes d'erreur

La fonction pthread_mutex_init échoue si:

Article Descriptif
ENOMEM La mémoire est insuffisante pour initialiser le mutex.
EINVAL La valeur spécifiée par attr n'est pas valide.
EPERM L'appelant n'a pas le privilège d'effectuer l'opération dans un environnement strictement conforme aux normes dans lequel la variable d'environnement XPG_SUS_ENV=ON.

La fonction pthread_mutex_destroy peut échouer si:

Article Descriptif
EBUSY L'implémentation a détecté une tentative de destruction de l'objet référencé par mutex alors qu'il est verrouillé ou référencé (par exemple, lorsqu'il est utilisé dans pthread_cond_waitou pthread_cond_timedwait par une autre unité d'exécution).
EINVAL La valeur spécifiée par mutex n'est pas valide.

Ces fonctions ne renverront pas le code d'erreur EINTR.