Sous-routine pthread_rwlock_timedrdlock
Objectif
Verrouille un verrou en lecture-écriture pour la lecture.
Syntaxe
#include <pthread.h>
#include <time.h>
int pthread_rwlock_timedrdlock(pthread_rwlock_t *restrict rwlock,
const struct timespec *restrict abs_timeout);
Descriptif
La fonction pthread_rwlock_timedrdlock () applique un verrou en lecture au verrou en lecture-écriture référencé par rwlock comme dans la fonction pthread_rwlock_rdlock () . Toutefois, si le verrou ne peut pas être acquis sans attendre que d'autres unités d'exécution déverrouillent le verrou, cette attente se termine lorsque le délai d'attente spécifié expire. Le délai d'attente expire lorsque le temps absolu spécifié par abs_timeout est écoulé-mesuré par l'horloge sur laquelle sont basés les délais d'attente (c'est-à-dire lorsque la valeur de cette horloge est égale ou supérieure à abs_timeout)-ou lorsque le temps absolu spécifié par abs_timeout a déjà été passé au moment de l'appel.
Si l'option Timers est prise en charge, le délai d'attente est basé sur l'horloge CLOCK_REALTIME ; si l'option Timers n'est pas prise en charge, le délai d'attente est basé sur l'horloge système renvoyée par la fonction time () .
La résolution du délai d'attente correspond à la résolution de l'horloge sur laquelle elle est basée. Le type de données timespec est défini dans l'en-tête <time.h> .
La fonction n'échoue jamais avec un délai d'attente si le verrou peut être acquis immédiatement. La validité du paramètre abs_timeout n'a pas besoin d'être vérifiée si le verrou peut être immédiatement acquis.
Si un signal qui provoque l'exécution d'un gestionnaire de signaux est envoyé à une unité d'exécution bloquée sur un verrou en lecture-écriture via un appel à pthread_rwlock_timedrdlock (), l'unité d'exécution reprend l'attente du verrou (comme s'il n'avait pas été interrompu) après le retour du gestionnaire de signaux.
L'unité d'exécution appelante peut se bloquer si elle détient un verrou en écriture sur rwlock au moment de l'appel. Les résultats sont indéfinis si cette fonction est appelée avec un verrou en lecture-écriture non initialisé.
Utilisation des Applications
La fonction pthread_rwlock_timedrdlock () fait partie des options Threads et Timeouts et n'a pas besoin d'être fournie sur toutes les implémentations.
Valeurs renvoyées
La fonction pthread_rwlock_timedrdlock () renvoie 0 si le verrou de lecture sur l'objet de verrou en lecture-écriture référencé par rwlock est acquis. Sinon, un numéro d'erreur est renvoyé pour indiquer l'erreur.
Codes d'erreur
La fonction pthread_rwlock_timedrdlock () échoue si:
| Article | Descriptif |
|---|---|
| [ ETIMEDOUT ] | Le verrou n'a pas pu être acquis avant l'expiration du délai spécifié. |
La fonction pthread_rwlock_timedrdlock () peut échouer si:
| Article | Descriptif |
|---|---|
| [ FEAGA ] | Le verrou en lecture n'a pas pu être acquis car le nombre maximal de verrous en lecture pour le verrou serait dépassé. |
| [ EDEADLK ] | L'unité d'exécution appelante détient déjà un verrou en écriture sur rwlock. |
| [ EINVAL ] | La valeur spécifiée par rwlock ne fait pas référence à un objet verrou en lecture-écriture initialisé, ou la valeur abs_timeout nanoseconde est inférieure à 0 ou supérieure ou égale à 1000 millions. |
Cette fonction ne renvoie pas le code d'erreur [ EINTR ].