Provided by: manpages-fr-dev_4.26.0-1_all bug

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 à
       debian-l10n-french@lists.debian.org.

Pages du manuel de Linux 6.9.1                     2 mai 2024                               pthread_spin_init(3)