Provided by: manpages-ro-dev_4.27.0-1_all bug

NUME

       pthread_setaffinity_np, pthread_getaffinity_np - stabilește/obține afinitatea CPU a unui fir

BIBLIOTECA

       Biblioteca de fire de execuție POSIX (libpthread, -lpthread)

SINOPSIS

       #define _GNU_SOURCE             /* Consultați 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);

DESCRIERE

       Funcția  pthread_setaffinity_np()  stabilește  masca  de  afinitate  CPU a firului thread la setul de CPU
       indicat de cpuset. Dacă apelul are succes, iar firul nu rulează în prezent pe unul dintre  CPU-urile  din
       cpuset, atunci acesta este migrat către unul dintre acele CPU-uri.

       Funcția  pthread_getaffinity_np()  returnează  masca  de afinitate CPU a firului thread în memoria tampon
       indicată de cpuset.

       Pentru mai multe detalii despre măștile de  afinitate  CPU,  consultați  sched_setaffinity(2).  Pentru  o
       descriere a unui set de macrocomenzi care pot fi utilizate pentru a manipula și inspecta seturile de CPU,
       consultați CPU_SET(3).

       Argumentul  cpusetsize  este  lungimea (în octeți) a memoriei tampon indicate de cpuset. De obicei, acest
       argument  ar  fi  specificat  ca  sizeof(cpu_set_t);  (poate  fi  o  altă  valoare,  dacă  se  utilizează
       macrocomenzile descrise în CPU_SET(3) pentru alocarea dinamică a unui set CPU).

VALOAREA RETURNATĂ

       În  caz  de  succes,  aceste  funcții  returnează  0; în caz de eroare, ele returnează un număr de eroare
       diferit de zero.

ERORI-IEȘIRE

       EFAULT Adresa de memorie furnizată nu a fost validă.

       EINVAL (pthread_setaffinity_np()) Masca de biți de afinitate mask nu conține niciun procesor care se află
              în prezent fizic pe sistem și care este permis  firului  de  execuție  în  conformitate  cu  orice
              restricții care pot fi impuse de mecanismul „cpuset” descris în cpuset(7).

       EINVAL (pthread_setaffinity_np())  cpuset  a  specificat un CPU care se afla în afara setului acceptat de
              nucleu; (opțiunea de configurare a nucleului CONFIG_NR_CPUS definește intervalul setului  acceptat
              de tipul de date al nucleului utilizat pentru a reprezenta seturile de CPU).

       EINVAL (pthread_getaffinity_np())  cpusetsize  este  mai  mică  decât  dimensiunea  măștii  de  afinitate
              utilizată de nucleu.

       ESRCH  Nu a putut fi găsit niciun fir de execuție cu identificatorul thread.

ATRIBUTE

       Pentru o explicație a termenilor folosiți în această secțiune, a se vedea attributes(7).
       ┌─────────────────────────────────────────────────────────────────────────┬───────────────────┬─────────┐
       │ InterfațăAtributValoare │
       ├─────────────────────────────────────────────────────────────────────────┼───────────────────┼─────────┤
       │ pthread_setaffinity_np(), pthread_getaffinity_np()                      │ Siguranța firelor │ MT-Safe │
       └─────────────────────────────────────────────────────────────────────────┴───────────────────┴─────────┘

STANDARDE

       GNU; de aici și sufixul „_np” (neportabil) din denumiri.

ISTORIC

       glibc 2.3.4.

       Numai în glibc 2.3.3, au  fost  furnizate  versiuni  ale  acestor  funcții  care  nu  aveau  un  argument
       cpusetsize.  În  schimb,  dimensiunea setului de procesoare transmisă apelurilor de sistem subiacente era
       întotdeauna sizeof(cpu_set_t).

NOTE

       După un apel la pthread_setaffinity_np(), setul de CPU-uri pe care  se  va  executa  efectiv  firul  este
       intersecția  dintre setul specificat în argumentul cpuset și setul de CPU-uri prezente efectiv în sistem.
       Sistemul poate restricționa și mai mult setul de CPU-uri pe  care  rulează  firul  de  execuție  dacă  se
       utilizează  mecanismul  „cpuset” descris în cpuset(7). Aceste restricții privind setul real de CPU-uri pe
       care va rula firul sunt impuse în mod silențios de către nucleu.

       Aceste   funcții   sunt   implementate   pe   baza   apelurilor   de   sistem   sched_setaffinity(2)   și
       sched_getaffinity(2).

       Un nou fir creat de pthread_create(3) moștenește o copie a măștii de afinitate CPU a creatorului său.

EXEMPLE

       În  următorul  program,  firul  principal utilizează pthread_setaffinity_np() pentru a-și defini masca de
       afinitate CPU pentru a include CPU de la 0 la 7 (care pot să nu fie toate disponibile în sistem) și  apoi
       apelează pthread_getaffinity_np() pentru a verifica masca de afinitate CPU rezultată a firului.

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

           /* Definește masca de afinitate pentru a include CPU de la 0 la 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");

           /* Verifică masca de afinitate actuală atribuită firului. */

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

           printf("Setul returnat de pthread_getaffinity_np() conține:\n");
           for (size_t j = 0; j < CPU_SETSIZE; j++)
               if (CPU_ISSET(j, &cpuset))
                   printf("    CPU %zu\n", j);

           exit(EXIT_SUCCESS);
       }

CONSULTAȚI ȘI

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

TRADUCERE

       Traducerea   în   limba   română   a   acestui   manual   a   fost   făcută   de   Remus-Gabriel    Chelu
       <remusgabriel.chelu@disroot.org>

       Această  traducere  este  documentație  gratuită;  citiți  Licența publică generală GNU Versiunea 3 sau o
       versiune  ulterioară  cu  privire  la  condiții  privind  drepturile  de  autor.   NU  se   asumă   NICIO
       RESPONSABILITATE.

       Dacă  găsiți  erori  în  traducerea  acestui manual, vă rugăm să trimiteți un e-mail la translation-team-
       ro@lists.sourceforge.net.

Pagini de manual de Linux 6.9.1                   15 iunie 2024                        pthread_setaffinity_np(3)