Sous-routine sem_timedwait

Objectif

Verrouille un sémaphore (ADVANCED REALTIME).

Syntaxe

#include <semaphore.h>
#include <time.h>

int sem_timedwait(sem_t *restrict sem,
       const struct timespec *restrict abs_timeout);  

Descriptif

La fonction sem_timedwait () verrouille le sémaphore référencé par sem comme dans la fonction sem_wait () . Toutefois, si le sémaphore ne peut pas être verrouillé sans attendre qu'un autre processus ou une autre unité d'exécution déverrouille le sémaphore en exécutant une fonction sem_post () , cette attente prend fin à l'expiration du délai spécifié.

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é transmis au moment de l'appel.

Si l'option Temporisateurs 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 en tant que structure dans l'en-tête <time.h> .

La fonction n'échoue jamais avec un délai d'attente si le sémaphore peut être verrouillé immédiatement. La validité du paramètre abs_timeout n'a pas besoin d'être vérifiée si le sémaphore peut être verrouillé immédiatement.

Utilisation des Applications

La fonction sem_timedwait () fait partie des options Semaphores et Timeouts et n'a pas besoin d'être fournie sur toutes les implémentations.

Valeurs renvoyées

La fonction sem_timedwait () renvoie 0 si le processus appelant a correctement exécuté l'opération de verrouillage de sémaphore sur le sémaphore désigné par sem. Si l'appel échoue, l'état du sémaphore reste inchangé, la fonction renvoie la valeur -1 et errno est défini pour indiquer l'erreur.

Codes d'erreur

La fonction sem_timedwait () échoue si:

Article Descriptif
[ VALEUR ] abs_timeout fait référence à une mémoire non valide.
[ EINVAL ] L'argument sem ne fait pas référence à un sémaphore valide.
[ EINVAL ] Le processus ou l'unité d'exécution aurait été bloqué et le paramètre abs_timeout a spécifié une valeur de zone de nanosecondes inférieure à 0 ou supérieure ou égale à 1000 millions.
[ ETIMEDOUT ] Le sémaphore n'a pas pu être verrouillé avant l'expiration du délai spécifié.

La fonction sem_timedwait () peut échouer si:

Article Descriptif
[ EDEADLK ] Une condition d'interblocage a été détectée.
[ EINTR ] Un signal a interrompu cette fonction.