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