pthread_attr_setaffinity_np, pthread_attr_getaffinity_np - set/get CPU affinity attribute in thread attributes object
POSIX threads library (libpthread
, -lpthread
)
#define _GNU_SOURCE /* See feature_test_macros(7) */
#include <pthread.h>
int pthread_attr_setaffinity_np(pthread_attr_t *attr,
size_t cpusetsize, const cpu_set_t *cpuset);
int pthread_attr_getaffinity_np(const pthread_attr_t *attr,
size_t cpusetsize, cpu_set_t *cpuset);
The pthread_attr_setaffinity_np() function sets the
CPU affinity mask attribute of the thread attributes object referred to
by attr
to the value specified in cpuset
. This
attribute determines the CPU affinity mask of a thread created using the
thread attributes object attr
.
The pthread_attr_getaffinity_np() function returns
the CPU affinity mask attribute of the thread attributes object referred
to by attr
in the buffer pointed to by cpuset
.
The argument cpusetsize
is the length (in bytes) of the
buffer pointed to by cpuset
. Typically, this argument would be
specified as sizeof(cpu_set_t)
.
For more details on CPU affinity masks, see sched_setaffinity(2). For a description of a set of macros that can be used to manipulate and inspect CPU sets, see CPU_SET(3).
On success, these functions return 0; on error, they return a nonzero error number.
(pthread_attr_setaffinity_np()) cpuset
specified a CPU that was outside the set supported by the kernel. (The
kernel configuration option CONFIG_NR_CPUS defines the
range of the set supported by the kernel data type used to represent CPU
sets.)
(pthread_attr_getaffinity_np()) A CPU in the
affinity mask of the thread attributes object referred to by
attr
lies outside the range specified by cpusetsize
(i.e., cpuset
/cpusetsize
is too small).
(pthread_attr_setaffinity_np()) Could not allocate memory.
For an explanation of the terms used in this section, see attributes(7).
Interface | Attribute | Value |
pthread_attr_setaffinity_np(), pthread_attr_getaffinity_np() |
Thread safety | MT-Safe |
GNU; hence the suffix "_np" (nonportable) in the names.
glibc 2.3.4.
In glibc 2.3.3 only, versions of these functions were provided that
did not have a cpusetsize
argument. Instead the CPU set size
given to the underlying system calls was always
sizeof(cpu_set_t)
.
sched_setaffinity(2), pthread_attr_init(3), pthread_setaffinity_np(3), cpuset(7), pthreads(7)