.\" Copyright (c) 2008 Linux Foundation, written by Michael Kerrisk
.\"     <mtk.manpages@gmail.com>
.\"
.\" %%%LICENSE_START(VERBATIM)
.\" Permission is granted to make and distribute verbatim copies of this
.\" manual provided the copyright notice and this permission notice are
.\" preserved on all copies.
.\"
.\" Permission is granted to copy and distribute modified versions of this
.\" manual under the conditions for verbatim copying, provided that the
.\" entire resulting derived work is distributed under the terms of a
.\" permission notice identical to this one.
.\"
.\" Since the Linux kernel and libraries are constantly changing, this
.\" manual page may be incorrect or out-of-date.  The author(s) assume no
.\" responsibility for errors or omissions, or for damages resulting from
.\" the use of the information contained herein.  The author(s) may not
.\" have taken the same level of care in the production of this manual,
.\" which is licensed free of charge, as they might when working
.\" professionally.
.\"
.\" Formatted or processed versions of this manual, if unaccompanied by
.\" the source, must acknowledge the copyright and authors of this work.
.\" %%%LICENSE_END
.\"
.TH PTHREAD_ATTR_SETSCHEDPOLICY 3 2021-03-22 "Linux" "Linux Programmer's Manual"
.SH NAME
pthread_attr_setschedpolicy, pthread_attr_getschedpolicy \- set/get
scheduling policy attribute in thread attributes object
.SH SYNOPSIS
.nf
.B #include <pthread.h>
.PP
.BI "int pthread_attr_setschedpolicy(pthread_attr_t *" attr ", int " policy );
.BI "int pthread_attr_getschedpolicy(const pthread_attr_t *restrict " attr ,
.BI "                                int *restrict " policy );
.PP
Compile and link with \fI\-pthread\fP.
.fi
.SH DESCRIPTION
The
.BR pthread_attr_setschedpolicy ()
function sets the scheduling policy attribute of the
thread attributes object referred to by
.IR attr
to the value specified in
.IR policy .
This attribute determines the scheduling policy of
a thread created using the thread attributes object
.IR attr .
.PP
The supported values for
.I policy
are
.BR SCHED_FIFO ,
.BR SCHED_RR ,
and
.BR SCHED_OTHER ,
with the semantics described in
.BR sched (7).
.\" FIXME . pthread_setschedparam() places no restriction on the policy,
.\" but pthread_attr_setschedpolicy() restricts policy to RR/FIFO/OTHER
.\" http://sourceware.org/bugzilla/show_bug.cgi?id=7013
.PP
The
.BR pthread_attr_getschedpolicy ()
returns the scheduling policy attribute of the thread attributes object
.IR attr
in the buffer pointed to by
.IR policy .
.PP
In order for the policy setting made by
.BR pthread_attr_setschedpolicy ()
to have effect when calling
.BR pthread_create (3),
the caller must use
.BR pthread_attr_setinheritsched (3)
to set the inherit-scheduler attribute of the attributes object
.I attr
to
.BR PTHREAD_EXPLICIT_SCHED .
.SH RETURN VALUE
On success, these functions return 0;
on error, they return a nonzero error number.
.SH ERRORS
.BR pthread_attr_setschedpolicy ()
can fail with the following error:
.TP
.B EINVAL
Invalid value in
.IR policy .
.PP
POSIX.1 also documents an optional
.B ENOTSUP
error ("attempt was made to set the attribute to an unsupported value") for
.BR pthread_attr_setschedpolicy ().
.\" .SH VERSIONS
.\" Available since glibc 2.0.
.SH ATTRIBUTES
For an explanation of the terms used in this section, see
.BR attributes (7).
.ad l
.nh
.TS
allbox;
lbx lb lb
l l l.
Interface	Attribute	Value
T{
.BR pthread_attr_setschedpolicy (),
.BR pthread_attr_getschedpolicy ()
T}	Thread safety	MT-Safe
.TE
.hy
.ad
.sp 1
.SH CONFORMING TO
POSIX.1-2001, POSIX.1-2008.
.SH EXAMPLES
See
.BR pthread_setschedparam (3).
.SH SEE ALSO
.ad l
.nh
.BR pthread_attr_init (3),
.BR pthread_attr_setinheritsched (3),
.BR pthread_attr_setschedparam (3),
.BR pthread_create (3),
.BR pthread_setschedparam (3),
.BR pthread_setschedprio (3),
.BR pthreads (7),
.BR sched (7)
