| AFFINITY(3) | Library Functions Manual | AFFINITY(3) |
pthread_setaffinity_np,
pthread_getaffinity_np —
affinity of threads
POSIX Threads Library (libpthread, -lpthread)
#include
<pthread.h>
#include <sched.h>
int
pthread_setaffinity_np(pthread_t
thread, size_t
size, cpuset_t
*set);
int
pthread_getaffinity_np(pthread_t
thread, size_t
size, cpuset_t
*set);
Thread affinity allows to run the thread on specified CPU or CPUs only.
The
pthread_setaffinity_np()
function sets the affinity mask set for
thread. At least one valid CPU must be set in the
mask.
The
pthread_getaffinity_np()
function gets the affinity mask of thread into
set. Note that set must be
created and initialized using the
cpuset(3) functions.
Setting CPU pthread_setaffinity_np
requires super-user privileges. Ordinary users can be allowed to control CPU
affinity of their threads via the
security.models.extensions.user_set_cpu_affinity
sysctl(7). See
secmodel_extensions(9).
Portable applications should not use the
pthread_setaffinity_np() and
pthread_getaffinity_np() functions.
The pthread_setaffinity_np() and
pthread_getaffinity_np() functions return 0 on
success. Otherwise, an error number is returned to indicate the error.
An example of code fragment, which sets the affinity for the current thread to the CPU whose ID is 0:
cpuset_t *cset;
pthread_t pth;
cpuid_t ci;
int error;
cset = cpuset_create();
if (cset == NULL) {
err(EXIT_FAILURE, "cpuset_create");
}
ci = 0;
cpuset_set(ci, cset);
pth = pthread_self();
error = pthread_setaffinity_np(pth, cpuset_size(cset), cset);
if (error) {
errc(EXIT_FAILURE, error, "pthread_setaffinity_np failed");
}
cpuset_destroy(cset);
Both functions are non-standard extensions.
Both functions may fail if:
There is an alternative processor sets interface, see pset(3). However, thread affinity and processor sets are mutually exclusive, hence mixing of these interfaces is prohibited.
cpuset(3), pset(3), pthread_getschedparam(3), pthread_setschedparam(3), sched(3), schedctl(8)
| February 21, 2025 | NetBSD 11.0 |