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