Man page - pthread_getaffinity_np(3)

Packages contains this manual

Available languages:

en fr ja ru ro

Manual

pthread_setaffinity_np

НАИМЕНОВАНИЕ
БИБЛИОТЕКА
ОБЗОР
ОПИСАНИЕ
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
ОШИБКИ
АТРИБУТЫ
СТАНДАРТЫ
ИСТОРИЯ
ПРИМЕЧАНИЯ
ПРИМЕРЫ
СМОТРИТЕ ТАКЖЕ
ПЕРЕВОД

НАИМЕНОВАНИЕ

pthread_setaffinity_np, pthread_getaffinity_np - получить/назначить увязываемый ЦП для нити

БИБЛИОТЕКА

Библиотека потоков POSIX ( libpthread , -lpthread )

ОБЗОР

#define _GNU_SOURCE /* Смотрите 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 );

ОПИСАНИЕ

Функция pthread_setaffinity_np () устанавливает маску увязывания ЦП для нити thread равной набору ЦП, указанному в cpuset . Если вызов выполняется без ошибок и нить не запущена ни на одном из ЦП в cpuset , то она перемещается на один из этих ЦП.

Функция pthread_getaffinity_np () помещает маску увязывания ЦП для нити thread в буфер, на который указывает cpuset .

Дополнительную информацию по маскам увязывания ЦП смотрите в sched_setaffinity (2). Описание набора макросов, которые можно использовать для просмотра и изменения наборов ЦП, смотрите в CPU_SET (3).

В аргументе cpusetsize указывается длина буфера (в байтах), на который указывает cpuset . Обычно, этот аргумент должен задаваться как sizeof(cpu_set_t) (он может иметь и другое значение, если используются макросы динамического выделения набора ЦП, описанные в CPU_SET (3)).

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ

При успешном выполнении эти функции возвращают 0; при ошибке возвращается ненулевой номер ошибки.

ОШИБКИ

EFAULT

Указан некорректный адрес памяти.

EINVAL

( pthread_setaffinity_np ()) В маске увязывания ЦП mask указаны процессоры, которых физически нет в системе, и которые разрешены нити согласно любым ограничениям, которые могут налагаться механизмом «cpuset», описанном в cpuset (7).

EINVAL

( pthread_setaffinity_np ()) В cpuset указан ЦП, который находится вне набора поддерживаемых ядром (в параметре сборки ядра CONFIG_NR_CPUS определён диапазон для набора, поддерживаемого типом данных ядра, который используется для представления наборов ЦП).

EINVAL

( pthread_getaffinity_np ()) Значение cpusetsize меньше размера маски увязывания, используемой в ядре.

ESRCH

Нить с идентификатором thread не найдена.

АТРИБУТЫ

Описание терминов данного раздела смотрите в attributes (7).

Image grohtml-632170-1.png

СТАНДАРТЫ

GNU, о чём свидетельствует наличие суффикса «_np» (nonportable) в именах.

ИСТОРИЯ

glibc 2.3.4.

В glibc 2.3.3 версии этих функций не имеют аргумента cpusetsize . Вместо него размер набора ЦП, передаваемый используемым системным вызовам, всегда равен sizeof(cpu_set_t) .

ПРИМЕЧАНИЯ

После вызова pthread_setaffinity_np () набор процессоров, на которых действительно будет выполняться нить, вычисляется пересечением набора из аргумента cpuset и набором процессоров, присутствующих в системе. В дальнейшем, система может ограничить набор процессоров нити, если задействован механизм «cpuset», описанный в cpuset (7). Эти ограничения на действительный набор процессоров, используемых для нити, без уведомления налагаются ядром.

Эти функции реализованы через системные вызовы sched_setaffinity (2) и sched_getaffinity (2).

Новая нить, созданная pthread_create (3), наследует копию маски увязывания ЦП своего создателя.

ПРИМЕРЫ

В этой программе главная нить использует pthread_setaffinity_np () для включения в свою маску увязывания ЦП процессоры с 0 по 7 (которых может не быть в системе), а затем вызывает pthread_getaffinity_np () для проверки получившейся маски увязывания ЦП у нити.

#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();
/* Set affinity mask to include CPUs 0 to 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");
/* Check the actual affinity mask assigned to the 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);
}

СМОТРИТЕ ТАКЖЕ

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

ПЕРЕВОД

Русский перевод этой страницы руководства разработал(и) Alexey, Azamat Hackimov <azamat.hackimov@gmail.com>, kogamatranslator49 <r.podarov@yandex.ru>, Darima Kogan <silverdk99@gmail.com>, Max Is <ismax799@gmail.com>, Yuri Kozlov <yuray@komyakino.ru>, Иван Павлов <pavia00@gmail.com> и Kirill Rekhov <krekhov.dev@gmail.com>

Этот перевод является свободной программной документацией; он распространяется на условиях общедоступной лицензии GNU (GNU General Public License - GPL, https://www.gnu.org/licenses/gpl-3.0.html версии 3 или более поздней) в отношении авторского права, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ.

Если вы обнаружите какие-либо ошибки в переводе этой страницы руководства, пожалуйста, сообщите об этом разработчику(ам) по его(их) адресу(ам) электронной почты или по адресу списка рассылки русских переводчиков .