pthread_spin_destroy ou pthread_spin_init Sous-routine
Objectif
Détruit ou initialise un objet de verrouillage actif.
Syntaxe
#include <pthread.h>
int pthread_spin_destroy(pthread_spinlock_t *lock);
int pthread_spin_init(pthread_spinlock_t *lock, int pshared); Descriptif
La sous-routine pthread_spin_destroy détruit le verrou actif référencé par le verrou 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 à la sous-routine pthread_spin_init . Les résultats ne sont pas définis si la sous-routine pthread_spin_destroy est appelée lorsqu'une unité d'exécution détient le verrou ou si cette fonction est appelée avec un verrou actif d'unité d'exécution non initialisé.
La sous-routine pthread_spin_init alloue les ressources requises pour utiliser le verrou actif référencé par le verrou et initialise le verrou à l'état déverrouillé.
Si l'option Thread Process-Shared Synchronization est prise en charge et que la valeur de pshared est PTHREAD_PROCESS_SHARED, l'implémentation doit permettre au verrou actif d'être exploité par toute unité d'exécution ayant accès à la mémoire où le verrou actif est alloué, même s'il est alloué en mémoire partagée par plusieurs processus.
Si l'option Thread Process-Shared Synchronization est prise en charge et que la valeur de pshared est PTHREAD_PROCESS_PRIVATE, ou si l'option n'est pas prise en charge, le verrou actif ne doit être utilisé que par les unités d'exécution créées dans le même processus que l'unité d'exécution qui a initialisé le verrou actif. Si des unités d'exécution de processus différents tentent d'opérer sur un tel verrou actif, le comportement n'est pas défini.
Les résultats ne sont pas définis si la sous-routine pthread_spin_init est appelée en spécifiant un verrou actif déjà initialisé. Les résultats ne sont pas définis si un verrou actif est utilisé sans être initialisé au préalable.
Si la fonction de sous-routine pthread_spin_init échoue, le verrou n'est pas initialisé et le contenu du verrou n'est pas défini.
Seul l'objet référencé par le verrou peut être utilisé pour effectuer la synchronisation.
Le résultat de la référence à des copies de cet objet dans des appels à la sous-routine pthread_spin_destroy , à la sous-routine pthread_spin_lock , à la sous-routine pthread_spin_trylock ou à la sous-routine pthread_spin_unlock n'est pas défini.
Valeurs renvoyées
Une fois terminées, ces fonctions doivent renvoyer zéro ; dans le cas contraire, un numéro d'erreur doit être renvoyé pour indiquer l'erreur.
Codes d'erreur
| Article | Descriptif |
|---|---|
| EBUSY | L'implémentation a détecté une tentative d'initialisation ou de destruction d'un verrou actif lors de son utilisation (par exemple, lors de son utilisation dans un appel pthread_spin_lock ) par une autre unité d'exécution. |
| EINVAL | La valeur spécifiée par le paramètre lock n'est pas valide. |
| Article | Descriptif |
|---|---|
| FEAGA | Le système ne dispose pas des ressources nécessaires pour initialiser un autre verrou actif. |
| ENOMEM | La mémoire est insuffisante pour initialiser le verrou. |