Provided by: manpages-fr-dev_3.32d0.2p4-1_all bug

NOM

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

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);

       Compilez et effectuez l'édition des liens avec l'option -pthread.

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 réussite, ces fonctions renvoient 0 ; en cas d'erreur elles renvoient un  numéro
       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 thread avec pour identifiant thread n'a pu être trouvé.

VERSIONS

       Ces fonctions sont fournies par la glibc depuis la version 2.3.4.

CONFORMITÉ

       Ces fonctions sont des extensions non standard GNU ; c'est la raison  du  suffixe  « _np »
       (non portable) dans leur nom.

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).

       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).

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

EXEMPLE

       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 <pthread.h>
       #include <stdio.h>
       #include <stdlib.h>
       #include <errno.h>

       #define handle_error_en(en, msg) \
               do { errno = en; perror(msg); exit(EXIT_FAILURE); } while (0)

       int
       main(int argc, char *argv[])
       {
           int s, j;
           cpu_set_t cpuset;
           pthread_t thread;

           thread = pthread_self();

           /* Set affinity mask to include CPUs 0 to 7 */

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

           s = pthread_setaffinity_np(thread, sizeof(cpu_set_t), &cpuset);
           if (s != 0)
               handle_error_en(s, "pthread_setaffinity_np");

           /* Check the actual affinity mask assigned to the thread */

           s = pthread_getaffinity_np(thread, sizeof(cpu_set_t), &cpuset);
           if (s != 0)
               handle_error_en(s, "pthread_getaffinity_np");

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

           exit(EXIT_SUCCESS);
       }

VOIR AUSSI

       sched_setaffinity(2),        sched_setscheduler(2),        pthread_attr_setaffinity_np(3),
       pthread_self(3), sched_getcpu(3), cpuset(7), pthreads(7)

COLOPHON

       Cette  page  fait partie de la publication 3.32 du projet man-pages Linux. Une description
       du projet et des  instructions  pour  signaler  des  anomalies  peuvent  être  trouvées  à
       l'adresse <URL:http://www.kernel.org/doc/man-pages/>.

TRADUCTION

       Depuis    2010,    cette   traduction   est   maintenue   à   l'aide   de   l'outil   po4a
       <URL:http://po4a.alioth.debian.org/> par l'équipe de traduction  francophone  au  sein  du
       projet perkamon <URL:http://perkamon.alioth.debian.org/>.

       Nicolas François et l'équipe francophone de traduction de Debian (2006-2009).

       Veuillez     signaler     toute     erreur     de     traduction     en     écrivant     à
       <debian-l10n-french@lists.debian.org>  ou  par  un  rapport  de  bogue   sur   le   paquet
       manpages-fr.

       Vous  pouvez  toujours  avoir  accès  à la version anglaise de ce document en utilisant la
       commande « man -L C <section> <page_de_man> ».