---
name: "pthread_attr_setaffinity_np"
section: "3"
platform: "linux"
package: "man-pages"
version: "6.19-1"
release: "Arch Linux 2026-11-01"
platforms: ["linux", "freebsd"]
url: "https://new.carta.tech/pthread_attr_setaffinity_np"
---

# pthread\_attr\_setaffinity\_np(3)

set/get CPU affinity attribute in thread attributes object

## NAME

pthread\_attr\_setaffinity\_np, pthread\_attr\_getaffinity\_np - set/get CPU affinity attribute in thread attributes object

## LIBRARY

POSIX threads library (*libpthread*, *-lpthread*)

## SYNOPSIS

```
#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***);**

## DESCRIPTION

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)](/sched_setaffinity/2.md). For a description of a set of macros that can be used to manipulate and inspect CPU sets, see [**CPU\_SET**(3)](/CPU_SET/3.md).

## RETURN VALUE

On success, these functions return 0; on error, they return a nonzero error number.

## ERRORS

- **EINVAL**

  (**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.)

- **EINVAL**

  (**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).

- **ENOMEM**

  (**pthread\_attr\_setaffinity\_np**()) Could not allocate memory.

## ATTRIBUTES

For an explanation of the terms used in this section, see [**attributes**(7)](/attributes/7.md).

| | | |
| --- | --- | --- |
| **Interface** | **Attribute** | **Value** |
| **pthread\_attr\_setaffinity\_np**(), **pthread\_attr\_getaffinity\_np**() | Thread safety | MT-Safe |

## STANDARDS

GNU; hence the suffix "\_np" (nonportable) in the names.

## HISTORY

glibc 2.3.4.

## NOTES

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)*.

## SEE ALSO

[**sched\_setaffinity**(2)](/sched_setaffinity/2.md), [**pthread\_attr\_init**(3)](/pthread_attr_init/3.md), [**pthread\_setaffinity\_np**(3)](/pthread_setaffinity_np/3.md), [**cpuset**(7)](/cpuset/7.md), [**pthreads**(7)](/pthreads/7.md)
