pthread_spin_init
Table des matières
Retour à l'index
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);
Exigences de macros de test de fonctionnalités pour la glibc (consulter
feature_test_macros(7)) :
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 :
- EAGAIN
-
Le système n'a pas assez de ressources pour initialiser un nouveau verrou
tournant.
- ENOMEM
-
Mémoire insuffisante pour initialiser le verrou tournant.
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 à
Index
- NOM
-
- BIBLIOTHÈQUE
-
- SYNOPSIS
-
- DESCRIPTION
-
- VALEUR RENVOYÉE
-
- ERREURS
-
- STANDARDS
-
- HISTORIQUE
-
- NOTES
-
- VOIR AUSSI
-
- TRADUCTION
-
This document was created by
man2html,
using the manual pages.
Time: 05:06:23 GMT, September 19, 2025