.\" -*- coding: UTF-8 -*- '\" t .\" Copyright (c) 2008 Linux Foundation, written by Michael Kerrisk .\" .\" .\" SPDX-License-Identifier: Linux-man-pages-copyleft .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH pthread_setaffinity_np 3 "20 июля 2023 г." "Linux man\-pages 6.05.01" .SH ИМЯ pthread_setaffinity_np, pthread_getaffinity_np \- получить/назначить увязываемый ЦП для нити .SH LIBRARY POSIX threads library (\fIlibpthread\fP, \fI\-lpthread\fP) .SH СИНТАКСИС .nf \fB#define _GNU_SOURCE\fP /* Смотрите feature_test_macros(7) */ \fB#include \fP .PP \fBint pthread_setaffinity_np(pthread_t \fP\fIthread\fP\fB, size_t \fP\fIcpusetsize\fP\fB,\fP \fB const cpu_set_t *\fP\fIcpuset\fP\fB);\fP \fBint pthread_getaffinity_np(pthread_t \fP\fIthread\fP\fB, size_t \fP\fIcpusetsize\fP\fB,\fP \fB cpu_set_t *\fP\fIcpuset\fP\fB);\fP .fi .SH ОПИСАНИЕ Функция \fBpthread_setaffinity_np\fP() устанавливает маску увязывания ЦП для нити \fIthread\fP равной набору ЦП, указанному в \fIcpuset\fP. Если вызов выполняется без ошибок и нить не запущена ни на одном из ЦП в \fIcpuset\fP, то она перемещается на один из этих ЦП. .PP Функция \fBpthread_getaffinity_np\fP() помещает маску увязывания ЦП для нити \fIthread\fP в буфер, на который указывает \fIcpuset\fP. .PP Дополнительную информацию по маскам увязывания ЦП смотрите в \fBsched_setaffinity\fP(2). Описание набора макросов, которые можно использовать для просмотра и изменения наборов ЦП, смотрите в \fBCPU_SET\fP(3). .PP В аргументе \fIcpusetsize\fP указывается длина буфера (в байтах), на который указывает \fIcpuset\fP. Обычно, этот аргумент должен задаваться как \fIsizeof(cpu_set_t)\fP (он может иметь и другое значение, если используются макросы динамического выделения набора ЦП, описанные в \fBCPU_SET\fP(3)). .SH "ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ" При успешном выполнении эти функции возвращают 0; при ошибке возвращается ненулевой номер ошибки. .SH ОШИБКИ .TP \fBEFAULT\fP Указан некорректный адрес памяти. .TP \fBEINVAL\fP (\fBpthread_setaffinity_np\fP()) В маске увязывания ЦП \fImask\fP указаны процессоры, которых физически нет в системе, и которые разрешены нити согласно любым ограничениям, которые могут налагаться механизмом «cpuset», описанном в \fBcpuset\fP(7). .TP \fBEINVAL\fP .\" cpumask_t .\" The raw sched_getaffinity() system call returns the size (in bytes) .\" of the cpumask_t type. (\fBpthread_setaffinity_np\fP()) В \fIcpuset\fP указан ЦП, который находится вне набора поддерживаемых ядром (в параметре сборки ядра \fBCONFIG_NR_CPUS\fP определён диапазон для набора, поддерживаемого типом данных ядра, который используется для представления наборов ЦП). .TP \fBEINVAL\fP (\fBpthread_getaffinity_np\fP()) Значение \fIcpusetsize\fP меньше размера маски увязывания, используемой в ядре. .TP \fBESRCH\fP Нить с идентификатором \fIthread\fP не найдена. .SH АТРИБУТЫ Описание терминов данного раздела смотрите в \fBattributes\fP(7). .TS allbox; lbx lb lb l l l. Интерфейс Атрибут Значение T{ .na .nh \fBpthread_setaffinity_np\fP(), \fBpthread_getaffinity_np\fP() T} Безвредность в нитях MT\-Safe .TE .sp 1 .SH СТАНДАРТЫ GNU; hence the suffix "_np" (nonportable) in the names. .SH ИСТОРИЯ glibc 2.3.4. .PP В glibc 2.3.3 версии этих функций не имеют аргумента \fIcpusetsize\fP. Вместо него размер набора ЦП, передаваемый используемым системным вызовам, всегда равен \fIsizeof(cpu_set_t)\fP. .SH ЗАМЕЧАНИЯ После вызова \fBpthread_setaffinity_np\fP() набор процессоров, на которых действительно будет выполняться нить, вычисляется пересечением набора из аргумента \fIcpuset\fP и набором процессоров, присутствующих в системе. В дальнейшем, система может ограничить набор процессоров нити, если задействован механизм «cpuset», описанный в \fBcpuset\fP(7). Эти ограничения на действительный набор процессоров, используемых для нити, без уведомления налагаются ядром. .PP Эти функции реализованы через системные вызовы \fBsched_setaffinity\fP(2) и \fBsched_getaffinity\fP(2). .PP Новая нить, созданная \fBpthread_create\fP(3), наследует копию маски увязывания ЦП своего создателя. .SH ПРИМЕРЫ В этой программе главная нить использует \fBpthread_setaffinity_np\fP() для включения в свою маску увязывания ЦП процессоры с 0 по 7 (которых может не быть в системе), а затем вызывает \fBpthread_getaffinity_np\fP() для проверки получившейся маски увязывания ЦП у нити. .PP .\" SRC BEGIN (pthread_setaffinity_np.c) .EX #define _GNU_SOURCE #include #include #include #include #include \& 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:\en"); for (size_t j = 0; j < CPU_SETSIZE; j++) if (CPU_ISSET(j, &cpuset)) printf(" CPU %zu\en", j); \& exit(EXIT_SUCCESS); } .EE .\" SRC END .SH "СМ. ТАКЖЕ" \fBsched_setaffinity\fP(2), \fBCPU_SET\fP(3), \fBpthread_attr_setaffinity_np\fP(3), \fBpthread_self\fP(3), \fBsched_getcpu\fP(3), \fBcpuset\fP(7), \fBpthreads\fP(7), \fBsched\fP(7) .PP .SH ПЕРЕВОД Русский перевод этой страницы руководства был сделан Alexey, Azamat Hackimov , kogamatranslator49 , Kogan, Max Is , Yuri Kozlov и Иван Павлов . .PP Этот перевод является бесплатной документацией; прочитайте .UR https://www.gnu.org/licenses/gpl-3.0.html Стандартную общественную лицензию GNU версии 3 .UE или более позднюю, чтобы узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ. .PP Если вы обнаружите ошибки в переводе этой страницы руководства, пожалуйста, отправьте электронное письмо на .MT man-pages-ru-talks@lists.sourceforge.net .ME .