pthread_rwlock_init ou pthread_rwlock_destroy

Objectif

Initialise ou détruit un objet verrou en lecture-écriture.

Bibliothèque

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

Syntaxe

#include <pthread.h>

int pthread_rwlock_init (rwlock, attr)
pthread_rwlock_t *rwlock;
const pthread_rwlockattr_t *attr;

int pthread_rwlock_destroy (rwlock)
pthread_rwlock_t *rwlock;
pthread_rwlock_t rwlock=PTHREAD_RWLOCK_INITIALIZER;

Descriptif

La sous-routine pthread_rwlock_init initialise le verrou en lecture-écriture référencé par rwlock avec les attributs référencés par attr. Si attr est NULL, les attributs de verrou en lecture-écriture par défaut sont utilisés ; l'effet est identique à la transmission de l'adresse d'un objet d'attributs de verrou en lecture-écriture par défaut. Une fois initialisé, le verrou peut être utilisé plusieurs fois sans être réinitialisé. Une fois l'initialisation réussie, l'état du verrou en lecture-écriture est initialisé et déverrouillé. Les résultats ne sont pas définis si pthread_rwlock_init est appelé en spécifiant un verrou en lecture-écriture déjà initialisé. Les résultats ne sont pas définis si un verrou en lecture-écriture est utilisé sans être initialisé au préalable.

Si la fonction pthread_rwlock_init échoue, rwlock n'est pas initialisé et le contenu de rwlock n'est pas défini.

La fonction pthread_rwlock_destroy détruit l'objet verrou en lecture-écriture référencé par rwlock et libère toutes les ressources utilisées par le verrou. L'effet de l'utilisation ultérieure du verrou n'est pas défini tant que le verrou n'est pas réinitialisé par un autre appel à pthread_rwlock_init. Une implémentation peut amener pthread_rwlock_destroy à définir l'objet référencé par rwlock sur une valeur non valide. Les résultats ne sont pas définis si pthread_rwlock_destroy est appelé lorsqu'une unité d'exécution détient rwlock. La tentative de destruction d'un verrou en lecture-écriture non initialisé entraîne un comportement non défini. Un objet verrou en lecture-écriture détruit peut être réinitialisé à l'aide de pthread_rwlock_init; les résultats du référencement de l'objet verrou en lecture-écriture après sa destruction ne sont pas définis.

Dans les cas où les attributs de verrou en lecture-écriture par défaut sont appropriés, la macro PTHREAD_RWLOCK_INITIALIZER peut être utilisée pour initialiser les verrous en lecture-écriture qui sont alloués de manière statique. L'effet est équivalent à l'initialisation dynamique par un appel à pthread_rwlock_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
rwlock Indique le verrou en lecture-écriture à initialiser ou à détruire.
attr Indique les attributs du verrou en lecture-écriture à initialiser.

Valeurs renvoyées

Si l'opération aboutit, les fonctions pthread_rwlock_init et pthread_rwlock_destroy renvoient zéro. Sinon, un numéro d'erreur est renvoyé pour indiquer l'erreur. Les vérifications d'erreur EBUSY et EINVAL, si elles sont implémentées, agissent comme si elles étaient effectuées immédiatement au début du traitement de la fonction et ont provoqué un retour d'erreur avant la modification de l'état du verrou en lecture-écriture spécifié par rwlock.

Codes d'erreur

La sous-routine pthread_rwlock_init échoue si:

Article Descriptif
ENOMEM La mémoire est insuffisante pour initialiser le verrou en lecture-écriture.
EINVAL La valeur spécifiée par attr n'est pas valide.

La sous-routine pthread_rwlock_destroy échoue si:

Article Descriptif
EBUSY L'implémentation a détecté une tentative de destruction de l'objet référencé par rwlock alors qu'il est verrouillé.
EINVAL La valeur spécifiée par attr n'est pas valide.