pthread_spin_init(3) | Library Functions Manual | pthread_spin_init(3) |
NOM
pthread_attr_init, pthread_attr_destroy — Initialiser ou détruire un verrou tournant
BIBLIOTHÈQUE
Bibliothèque de threads POSIX (libpthread, -lpthread)
SYNOPSIS
#include <pthread.h>
int pthread_spin_init(pthread_spinlock_t *lock, int pshared); int pthread_spin_destroy(pthread_spinlock_t *lock);
pthread_spin_init(), pthread_spin_destroy() :
_POSIX_C_SOURCE >= 200112L
DESCRIPTION
Remarque générale : La plupart des programmes devraient utiliser des mutex à la place de verrous tournants. Les verrous tournants sont essentiellement utiles employés de manière conjointe avec des politiques d'ordonnancement en temps réel. Voir NOTES.
La fonction pthread_spin_init() alloue toutes les ressources nécessaires pour utiliser le verrou tournant auquel se réfère lock et initialise le verrou pour qu'il soit en état déverrouillé. L'argument pshared doit avoir une des valeurs suivantes :
- PTHREAD_PROCESS_PRIVATE
- Le verrou tournant est destiné à être utilisé uniquement par des threads du même processus que celui du thread qui appelle pthread_spin_init(). (Essayer de partager le verrou entre processus résulte en un comportement indéfini.)
- PTHREAD_PROCESS_SHARED
- Le verrou tournant peut être opéré par n'importe quel thread de n'importe quel processus qui a accès à la mémoire contenant le verrou (c'est-à-dire, le verrou peut être dans un objet mémoire partagé par de multiples processus).
Appeler pthread_spin_init() sur un verrou tournant qui a déjà été initialisé résulte en un comportement indéfini.
La fonction pthread_spin_destroy() détruit un verrou tournant précédemment initialisé, libérant toutes les ressources qui lui ont été attribuées. Détruire un verrou tournant qui n'a pas été précédemment initialisé ou un verrou alors qu'un autre thread le possède résulte en un comportement indéfini.
Une fois que le verrou tournant a été détruit, réaliser une opération sur le verrou autre que de l'initialiser à nouveau avec pthread_spin_init() résulte en un comportement indéfini.
Le résultat de la réalisation d'opérations telles que pthread_spin_lock(3), pthread_spin_unlock(3) et pthread_spin_destroy() sur des copies de l'objet auquel se réfère lock est indéfini.
VALEUR RENVOYÉE
En cas de réussite, ces fonctions renvoient 0. En cas d'erreur, elles renvoient un numéro d'erreur. Si pthread_spin_init() échoue, le verrou n'est pas initialisé.
ERREURS
pthread_spin_init() peut échouer avec les erreurs suivantes :
STANDARDS
POSIX.1-2008.
HISTORIQUE
glibc 2.2. POSIX.1-2001.
La prise en charge de verrous tournants partagés par les processus est une option POSIX. Cette option est prise en charge dans l'implémentation de la glibc.
NOTES
Les verrous tournants doivent être employés de manière conjointe avec des politiques d'ordonnancement en temps réel (SCHED_FIFO ou éventuellement SCHED_RR). L'utilisation de verrous tournants avec des politiques d'ordonnancement non déterministes tel que SCHED_OTHER est le signe probablement d'une erreur de conception. Le problème est que si un thread opérant avec une politique de ce type est ordonnancé hors processeur tandis qu'il possède un verrou tournant, alors les autres threads vont perdre leur temps en attente active du verrou jusqu'à ce que le propriétaire du verrou soit à nouveau réordonnancé et libère le verrou.
Si des threads créent une situation d'interblocage lors de l'utilisation de verrous tournants, ces threads se mettront en attente active pour toujours en consommant du temps de processeur.
Les verrous tournants de l'espace utilisateur ne sont pas applicables comme une solution générale de verrouillage. Ils sont, par définition, sujets à des inversions de priorité et à des durées d'attente active illimitées. Un développeur utilisant des verrous tournants doit être particulièrement prudent non seulement sur le code, mais aussi en matière de configuration du système, de placement des threads et d'assignation de priorité.
VOIR AUSSI
pthread_mutex_init(3), pthread_mutex_lock(3), pthread_spin_lock(3), pthread_spin_unlock(3), pthreads(7)
TRADUCTION
La traduction française de cette page de manuel a été créée par Christophe Blaess https://www.blaess.fr/christophe/, Stéphan Rafin <stephan.rafin@laposte.net>, Thierry Vignaud <tvignaud@mandriva.com>, François Micaux, Alain Portal <aportal@univ-montp2.fr>, Jean-Philippe Guérard <fevrier@tigreraye.org>, Jean-Luc Coulon (f5ibh) <jean-luc.coulon@wanadoo.fr>, Julien Cristau <jcristau@debian.org>, Thomas Huriaux <thomas.huriaux@gmail.com>, Nicolas François <nicolas.francois@centraliens.net>, Florentin Duneau <fduneau@gmail.com>, Simon Paillard <simon.paillard@resel.enst-bretagne.fr>, Denis Barbier <barbier@debian.org>, David Prévot <david@tilapin.org>, Frédéric Hantrais <fhantrais@gmail.com> et Jean-Pierre Giraud <jean-pierregiraud@neuf.fr>
Cette traduction est une documentation libre ; veuillez vous reporter à la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE.
Si vous découvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message à debian-l10n-french@lists.debian.org.
2 mai 2024 | Pages du manuel de Linux 6.8 |