October 18, 2008 AFFINITY 3

### NAME

pthread_setaffinity_np, pthread_getaffinity_np - affinity of threads

### LIBRARY

POSIX Thread Library (libpthread, -lpthread)

### SYNOPSIS

```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`)

### DESCRIPTION

Thread affinity allows to run the thread on specified CPU or CPUs only.

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.

### RETURN VALUES

The pthread_setaffinity_np(``) and pthread_getaffinity_np(``) functions return 0 on success. Otherwise, an error number is returned to indicate the error.

### EXAMPLES

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;

            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) {
                    ...
            }
            cpuset_destroy(cset);

`

### ERRORS

The pthread_setaffinity_np(``) and pthread_getaffinity_np(``) functions fail if:

[```EINVAL`]
  The specified ```set` was invalid.

[```EPERM`]
  The calling process lacks the appropriate privileges to perform the operation.

[```ESRCH`]
  No thread could be found corresponding to the one specified by ```thread`.

### NOTES

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.

### SEE ALSO

cpuset(3), pset(3), pthread_getschedparam(3), pthread_setschedparam(3), sched(3), schedctl(8)