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

NOM

       pthread_setaffinity_np,  pthread_getaffinity_np  -  Définir et obtenir l'affinité CPU d'un
       thread

BIBLIOTHÈQUE

       Bibliothèque de threads POSIX (libpthread, -lpthread)

SYNOPSIS

       #define _GNU_SOURCE             /* Consultez feature_test_macros(7) */
       #include <pthread.h>

       int pthread_setaffinity_np(pthread_t thread, size_t cpusetsize,
                                  const cpu_set_t *cpuset);
       int pthread_getaffinity_np(pthread_t thread, size_t cpusetsize,
                                  cpu_set_t *cpuset);

DESCRIPTION

       La fonction pthread_setaffinity_np() définit le masque d'affinité  CPU  du  thread  thread
       comme étant l'ensemble de CPU pointé par cpuset. Si l'appel réussit et que le thread n'est
       pas en cours d'exécution sur un des CPU de cpuset, alors il est déplacé sur un de ces CPU.

       La fonction pthread_getaffinity_np() renvoie, dans le tampon pointé par cpuset, le  masque
       d'affinité CPU du thread thread.

       Pour  plus de détails sur les masques d'affinité CPU, consultez sched_setaffinity(2). Pour
       une description d'un jeu de macros qui peuvent être utilisées pour manipuler et  inspecter
       des ensembles de CPU, consultez CPU_SET(3).

       Le  paramètre  cpusetsize  est  la  longueur  (en  octets)  du  tampon  pointé par cpuset.
       Typiquement, ce paramètre sera sizeof (cpu_set_t) (il peut prendre d'autres valeurs, si on
       utilise  les  macros  décrites  dans  CPU_SET(3) pour allouer dynamiquement un ensemble de
       CPU).

VALEUR RENVOYÉE

       En cas de succès, ces fonctions renvoient 0 ; en cas d'erreur,  elles  renvoient  un  code
       d'erreur non nul.

ERREURS

       EFAULT Une adresse mémoire fournie n'est pas correcte.

       EINVAL (pthread_setaffinity_np())  Le  masque  de  bits d'affinité mask ne contient pas de
              processeurs qui soit actuellement physiquement sur le système et autorisé  pour  le
              thread d'après les restrictions imposées par le mécanisme d'ensembles de CPU décrit
              dans cpuset(7).

       EINVAL (pthread_setaffinity_np()) Le cpuset indique un CPU en dehors de l'ensemble pris en
              charge  par  le  noyau  (l'option  de configuration du noyau CONFIG_NR_CPUS définie
              l'intervalle de l'ensemble pris en charge par le type de données du  noyau  utilisé
              pour représenter les ensembles de CPU).

       EINVAL (pthread_getaffinity_np())  cpusetsize  est  plus  petit  que  le  taille du masque
              d'affinité utilisé par le noyau.

       ESRCH  Aucun fil d’exécution avec pour identifiant thread n'a pu être trouvé.

ATTRIBUTS

       Pour une explication des termes utilisés dans cette section, consulter attributes(7).

       ┌────────────────────────────────────────────────────────┬──────────────────────┬─────────┐
       │InterfaceAttributValeur  │
       ├────────────────────────────────────────────────────────┼──────────────────────┼─────────┤
       │pthread_setaffinity_np(), pthread_getaffinity_np()      │ Sécurité des threads │ MT-Safe │
       └────────────────────────────────────────────────────────┴──────────────────────┴─────────┘

STANDARDS

       GNU ; d'où le suffixe « _np » (non portable) dans leur nom.

HISTORIQUE

       glibc 2.3.4.

       Dans la glibc 2.3.3, uniquement, les versions de ces fonctions n'avaient pas de  paramètre
       cpusetsize.  À  la  place,  la  taille  de  l'ensemble  de  CPU  fourni  à l'appel système
       sous-jacent était toujours sizeof(cpu_set_t).

NOTES

       Après un appel à pthread_setaffinity_np(), l'ensemble de CPU  sur  lesquels  le  processus
       s'exécutera  est  l'intersection  de  l'ensemble  spécifié  dans  le  paramètre  cpuset et
       l'ensemble des CPU actuellement présents sur  le  système.  Le  système  peut  restreindre
       encore  plus  l'ensemble  des  CPU  sur lesquels le processus peut tourner si le mécanisme
       « cpuset », décrit dans cpuset(7), est utilisé. Ces restrictions sur le véritable ensemble
       de  CPU  sur  lesquels  le  processus peut tourner sont imposées sans avertissement par le
       noyau.

       Ces fonctions sont implémentées en utilisant les appels  système  sched_setaffinity(2)  et
       sched_getaffinity(2).

       Un  nouveau thread créé avec pthread_create(3) hérite d'une copie du masque d'affinité CPU
       de son créateur.

EXEMPLES

       Dans le programme suivant,  le  thread  principal  utilise  pthread_setaffinity_np()  pour
       définir  son  masque  d'affinité  CPU incluant les CPU 0 à 7 (qui peuvent ne pas être tous
       présents sur le système), puis appelle pthread_getaffinity_np() pour  vérifier  le  masque
       d'affinité CPU finalement utilisé pour le thread.

       #define _GNU_SOURCE
       #include <err.h>
       #include <errno.h>
       #include <pthread.h>
       #include <stdio.h>
       #include <stdlib.h>

       int
       main(void)
       {
           int s;
           cpu_set_t cpuset;
           pthread_t thread;

           thread = pthread_self();

           /* Définir le masque d'affinité pour inclure les CPU 0 à 7. */

           CPU_ZERO(&cpuset);
           for (size_t j = 0; j < 8; j++)
               CPU_SET(j, &cpuset);

           s = pthread_setaffinity_np(thread, sizeof(cpuset), &cpuset);
           if (s != 0)
               errc(EXIT_FAILURE, s, "pthread_setaffinity_np");

           /* Vérifier le masque d'affinité réel assigné au thread. */

           s = pthread_getaffinity_np(thread, sizeof(cpuset), &cpuset);
           if (s != 0)
               errc(EXIT_FAILURE, s, "pthread_getaffinity_np");

           printf("Set returned by pthread_getaffinity_np() contained:\n");
           for (size_t j = 0; j < CPU_SETSIZE; j++)
               if (CPU_ISSET(j, &cpuset))
                   printf("    CPU %zu\n", j);

           exit(EXIT_SUCCESS);
       }

VOIR AUSSI

       sched_setaffinity(2),    CPU_SET(3),    pthread_attr_setaffinity_np(3),   pthread_self(3),
       sched_getcpu(3), cpuset(7), pthreads(7), sched(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  ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩  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⟩.