pthread_attr_init, pthread_attr_destroy, pthread_attr_set-
       detachstate,                  pthread_attr_getdetachstate,
       pthread_attr_setschedparam,    pthread_attr_getschedparam,
       pthread_attr_setschedpolicy,  pthread_attr_getschedpolicy,
       pthread_attr_setinheritsched,       pthread_attr_getinher-
       itsched,  pthread_attr_setscope,  pthread_attr_getscope  -
       thread creation attributes



SYNOPSIS

       #include <pthread.h>

       int pthread_attr_init(pthread_attr_t *attr);

       int pthread_attr_destroy(pthread_attr_t *attr);

       int  pthread_attr_setdetachstate(pthread_attr_t *attr, int
       detachstate);

       int    pthread_attr_getdetachstate(const    pthread_attr_t
       *attr, int *detachstate);

       int  pthread_attr_setschedpolicy(pthread_attr_t *attr, int
       policy);

       int    pthread_attr_getschedpolicy(const    pthread_attr_t
       *attr, int *policy);

       int pthread_attr_setschedparam(pthread_attr_t *attr, const
       struct sched_param *param);

       int pthread_attr_getschedparam(const pthread_attr_t *attr,
       struct sched_param *param);

       int pthread_attr_setinheritsched(pthread_attr_t *attr, int
       inherit);

       int   pthread_attr_getinheritsched(const    pthread_attr_t
       *attr, int *inherit);

       int    pthread_attr_setscope(pthread_attr_t   *attr,   int
       scope);

       int pthread_attr_getscope(const pthread_attr_t *attr,  int
       *scope);



DESCRIPTION

       Setting  attributes  for  threads is achieved by filling a
       thread attribute object attr of type pthread_attr_t,  then
       passing it as second argument to pthread_create(3).  Pass-
       ing NULL is  equivalent  to  passing  a  thread  attribute
       attr and fills it with default values for the  attributes.
       (The  default values are listed below for each attribute.)

       Each attribute attrname (see  below  for  a  list  of  all
       attributes)  can  be  individually  set using the function
       pthread_attr_setattrname and retrieved using the  function
       pthread_attr_getattrname.

       pthread_attr_destroy  destroys  a thread attribute object,
       which must  not  be  reused  until  it  is  reinitialized.
       pthread_attr_destroy  does  nothing  in  the  LinuxThreads
       implementation.

       Attribute objects are consulted only when creating  a  new
       thread. The same attribute object can be used for creating
       several threads. Modifying an  attribute  object  after  a
       call  to  pthread_create does not change the attributes of
       the thread previously created.

       The following thread attributes are supported:


   detachstate
       Control whether the thread  is  created  in  the  joinable
       state  (value  PTHREAD_CREATE_JOINABLE) or in the detached
       state ( PTHREAD_CREATE_DETACHED).

       Default value: PTHREAD_CREATE_JOINABLE.

       In the joinable state, another thread can  synchronize  on
       the  thread  termination  and recover its termination code
       using pthread_join(3), but some of  the  thread  resources
       are  kept  allocated  after  the  thread  terminates,  and
       reclaimed    only    when    another    thread    performs
       pthread_join(3) on that thread.

       In  the  detached  state, the thread resources are immedi-
       ately freed when it terminates, but pthread_join(3) cannot
       be used to synchronize on the thread termination.

       A thread created in the joinable state can later be put in
       the detached thread using pthread_detach(3).


   schedpolicy
       Select the  scheduling  policy  for  the  thread:  one  of
       SCHED_OTHER  (regular,  non-realtime scheduling), SCHED_RR
       (realtime, round-robin) or SCHED_FIFO (realtime,  first-in
       first-out). See sched_setpolicy(2) for more information on
       scheduling policies.

       Default value: SCHED_OTHER.
       are available only to processes with superuser privileges.

       The scheduling policy of a thread  can  be  changed  after
       creation with pthread_setschedparam(3).


   schedparam
       Contain   the   scheduling  parameters  (essentially,  the
       scheduling priority) for the thread. See sched_setparam(2)
       for more information on scheduling parameters.

       Default value: priority is 0.

       This attribute is not significant if the scheduling policy
       is SCHED_OTHER; it only matters for the realtime  policies
       SCHED_RR and SCHED_FIFO.

       The  scheduling  priority of a thread can be changed after
       creation with pthread_setschedparam(3).


   inheritsched
       Indicate whether  the  scheduling  policy  and  scheduling
       parameters  for the newly created thread are determined by
       the values of the schedpolicy  and  schedparam  attributes
       (value  PTHREAD_EXPLICIT_SCHED)  or are inherited from the
       parent thread (value PTHREAD_INHERIT_SCHED).

       Default value: PTHREAD_EXPLICIT_SCHED.


   scope
       Define the scheduling contention  scope  for  the  created
       thread.   The  only  value  supported  in the LinuxThreads
       implementation is PTHREAD_SCOPE_SYSTEM, meaning  that  the
       threads contend for CPU time with all processes running on
       the machine. In particular, thread priorities  are  inter-
       preted  relative  to the priorities of all other processes
       on the machine. The other value specified by the standard,
       PTHREAD_SCOPE_PROCESS,  means  that  scheduling contention
       occurs only between the threads of  the  running  process:
       thread  priorities are interpreted relative to the priori-
       ties of the other threads of the  process,  regardless  of
       the  priorities of other processes.  PTHREAD_SCOPE_PROCESS
       is not supported in LinuxThreads.

       Default value: PTHREAD_SCOPE_SYSTEM.



RETURN VALUE

       All functions return 0 on success  and  a  non-zero  error
       code  on  error.  On success, the pthread_attr_getattrname
       ment.



ERRORS

       The pthread_attr_setdetachstate function returns the  fol-
       lowing error codes on error:

              EINVAL the  specified  detachstate  is  not  one of
                     PTHREAD_CREATE_JOINABLE   or    PTHREAD_CRE-
                     ATE_DETACHED.

       The  pthread_attr_setschedparam  function returns the fol-
       lowing error codes on error:

              EINVAL the priority specified in param  is  outside
                     the  range  of  allowed  priorities  for the
                     scheduling policy currently in attr (1 to 99
                     for   SCHED_FIFO   and   SCHED_RR;   0   for
                     SCHED_OTHER).

       The pthread_attr_setschedpolicy function returns the  fol-
       lowing error codes on error:

              EINVAL the   specified   policy   is   not  one  of
                     SCHED_OTHER, SCHED_FIFO, or SCHED_RR.


              ENOTSUP
                     policy is SCHED_FIFO or  SCHED_RR,  and  the
                     effective user of the calling process is not
                     super-user.

       The pthread_attr_setinheritsched function returns the fol-
       lowing error codes on error:

              EINVAL the   specified   inherit   is  not  one  of
                     PTHREAD_INHERIT_SCHED                     or
                     PTHREAD_EXPLICIT_SCHED.

       The  pthread_attr_setscope  function returns the following
       error codes on error:

              EINVAL the  specified   scope   is   not   one   of
                     PTHREAD_SCOPE_SYSTEM  or  PTHREAD_SCOPE_PRO-
                     CESS.


              ENOTSUP
                     the specified scope is PTHREAD_SCOPE_PROCESS
                     (not supported).


       Xavier Leroy <Xavier.Leroy@inria.fr>



SEE ALSO

       pthread_create(3),   pthread_join(3),   pthread_detach(3),
       pthread_setschedparam(3).