mirror of
https://git.rtems.org/rtems-docs/
synced 2025-05-19 07:47:43 +08:00
1334 lines
33 KiB
ReStructuredText
1334 lines
33 KiB
ReStructuredText
Thread Manager
|
|
##############
|
|
|
|
Introduction
|
|
============
|
|
|
|
The thread manager implements the functionality required of the thread
|
|
manager as defined by POSIX 1003.1b. This standard requires that
|
|
a compliant operating system provide the facilties to manage multiple
|
|
threads of control and defines the API that must be provided.
|
|
|
|
The services provided by the thread manager are:
|
|
|
|
- ``pthread_attr_init`` - Initialize a Thread Attribute Set
|
|
|
|
- ``pthread_attr_destroy`` - Destroy a Thread Attribute Set
|
|
|
|
- ``pthread_attr_setdetachstate`` - Set Detach State
|
|
|
|
- ``pthread_attr_getdetachstate`` - Get Detach State
|
|
|
|
- ``pthread_attr_setstacksize`` - Set Thread Stack Size
|
|
|
|
- ``pthread_attr_getstacksize`` - Get Thread Stack Size
|
|
|
|
- ``pthread_attr_setstackaddr`` - Set Thread Stack Address
|
|
|
|
- ``pthread_attr_getstackaddr`` - Get Thread Stack Address
|
|
|
|
- ``pthread_attr_setscope`` - Set Thread Scheduling Scope
|
|
|
|
- ``pthread_attr_getscope`` - Get Thread Scheduling Scope
|
|
|
|
- ``pthread_attr_setinheritsched`` - Set Inherit Scheduler Flag
|
|
|
|
- ``pthread_attr_getinheritsched`` - Get Inherit Scheduler Flag
|
|
|
|
- ``pthread_attr_setschedpolicy`` - Set Scheduling Policy
|
|
|
|
- ``pthread_attr_getschedpolicy`` - Get Scheduling Policy
|
|
|
|
- ``pthread_attr_setschedparam`` - Set Scheduling Parameters
|
|
|
|
- ``pthread_attr_getschedparam`` - Get Scheduling Parameters
|
|
|
|
- ``pthread_attr_getaffinity_np`` - Get Thread Affinity Attribute
|
|
|
|
- ``pthread_attr_setaffinity_np`` - Set Thread Affinity Attribute
|
|
|
|
- ``pthread_create`` - Create a Thread
|
|
|
|
- ``pthread_exit`` - Terminate the Current Thread
|
|
|
|
- ``pthread_detach`` - Detach a Thread
|
|
|
|
- ``pthread_getattr_np`` - Get Thread Attributes
|
|
|
|
- ``pthread_join`` - Wait for Thread Termination
|
|
|
|
- ``pthread_self`` - Get Thread ID
|
|
|
|
- ``pthread_equal`` - Compare Thread IDs
|
|
|
|
- ``pthread_once`` - Dynamic Package Initialization
|
|
|
|
- ``pthread_setschedparam`` - Set Thread Scheduling Parameters
|
|
|
|
- ``pthread_getschedparam`` - Get Thread Scheduling Parameters
|
|
|
|
- ``pthread_getaffinity_np`` - Get Thread Affinity
|
|
|
|
- ``pthread_setaffinity_np`` - Set Thread Affinity
|
|
|
|
Background
|
|
==========
|
|
|
|
Thread Attributes
|
|
-----------------
|
|
|
|
Thread attributes are utilized only at thread creation time. A thread
|
|
attribute structure may be initialized and passed as an argument to
|
|
the ``pthread_create`` routine.
|
|
|
|
*stack address*
|
|
is the address of the optionally user specified stack area for this thread.
|
|
If this value is NULL, then RTEMS allocates the memory for the thread stack
|
|
from the RTEMS Workspace Area. Otherwise, this is the user specified
|
|
address for the memory to be used for the thread's stack. Each thread must
|
|
have a distinct stack area. Each processor family has different alignment
|
|
rules which should be followed.
|
|
|
|
*stack size*
|
|
is the minimum desired size for this thread's stack area.
|
|
If the size of this area as specified by the stack size attribute
|
|
is smaller than the minimum for this processor family and the stack
|
|
is not user specified, then RTEMS will automatically allocate a
|
|
stack of the minimum size for this processor family.
|
|
|
|
*contention scope*
|
|
specifies the scheduling contention scope. RTEMS only supports the
|
|
PTHREAD_SCOPE_PROCESS scheduling contention scope.
|
|
|
|
*scheduling inheritance*
|
|
specifies whether a user specified or the scheduling policy and
|
|
parameters of the currently executing thread are to be used. When
|
|
this is PTHREAD_INHERIT_SCHED, then the scheduling policy and
|
|
parameters of the currently executing thread are inherited by
|
|
the newly created thread.
|
|
|
|
*scheduling policy and parameters*
|
|
specify the manner in which the thread will contend for the processor.
|
|
The scheduling parameters are interpreted based on the specified policy.
|
|
All policies utilize the thread priority parameter.
|
|
|
|
Operations
|
|
==========
|
|
|
|
There is currently no text in this section.
|
|
|
|
Services
|
|
========
|
|
|
|
This section details the thread manager's services.
|
|
A subsection is dedicated to each of this manager's services
|
|
and describes the calling sequence, related constants, usage,
|
|
and status codes.
|
|
|
|
pthread_attr_init - Initialize a Thread Attribute Set
|
|
-----------------------------------------------------
|
|
.. index:: pthread_attr_init
|
|
.. index:: initialize a thread attribute set
|
|
|
|
**CALLING SEQUENCE:**
|
|
|
|
.. code:: c
|
|
|
|
#include <pthread.h>
|
|
int pthread_attr_init(
|
|
pthread_attr_t \*attr
|
|
);
|
|
|
|
**STATUS CODES:**
|
|
|
|
*EINVAL*
|
|
The attribute pointer argument is invalid.
|
|
|
|
**DESCRIPTION:**
|
|
|
|
The ``pthread_attr_init`` routine initializes the thread attributes
|
|
object specified by ``attr`` with the default value for all of the
|
|
individual attributes.
|
|
|
|
**NOTES:**
|
|
|
|
The settings in the default attributes are implementation defined. For
|
|
RTEMS, the default attributes are as follows:
|
|
|
|
- stackadr
|
|
is not set to indicate that RTEMS is to allocate the stack memory.
|
|
|
|
- stacksize
|
|
is set to ``PTHREAD_MINIMUM_STACK_SIZE``.
|
|
|
|
- contentionscope
|
|
is set to ``PTHREAD_SCOPE_PROCESS``.
|
|
|
|
- inheritsched
|
|
is set to ``PTHREAD_INHERIT_SCHED`` to indicate that the created
|
|
thread inherits its scheduling attributes from its parent.
|
|
|
|
- detachstate
|
|
is set to ``PTHREAD_CREATE_JOINABLE``.
|
|
|
|
pthread_attr_destroy - Destroy a Thread Attribute Set
|
|
-----------------------------------------------------
|
|
.. index:: pthread_attr_destroy
|
|
.. index:: destroy a thread attribute set
|
|
|
|
**CALLING SEQUENCE:**
|
|
|
|
.. code:: c
|
|
|
|
#include <pthread.h>
|
|
int pthread_attr_destroy(
|
|
pthread_attr_t \*attr
|
|
);
|
|
|
|
**STATUS CODES:**
|
|
|
|
*EINVAL*
|
|
The attribute pointer argument is invalid.
|
|
|
|
*EINVAL*
|
|
The attribute set is not initialized.
|
|
|
|
**DESCRIPTION:**
|
|
|
|
The ``pthread_attr_destroy`` routine is used to destroy a thread
|
|
attributes object. The behavior of using an attributes object after
|
|
it is destroyed is implementation dependent.
|
|
|
|
**NOTES:**
|
|
|
|
NONE
|
|
|
|
pthread_attr_setdetachstate - Set Detach State
|
|
----------------------------------------------
|
|
.. index:: pthread_attr_setdetachstate
|
|
.. index:: set detach state
|
|
|
|
**CALLING SEQUENCE:**
|
|
|
|
.. code:: c
|
|
|
|
#include <pthread.h>
|
|
int pthread_attr_setdetachstate(
|
|
pthread_attr_t \*attr,
|
|
int detachstate
|
|
);
|
|
|
|
**STATUS CODES:**
|
|
|
|
*EINVAL*
|
|
The attribute pointer argument is invalid.
|
|
|
|
*EINVAL*
|
|
The attribute set is not initialized.
|
|
|
|
*EINVAL*
|
|
The detachstate argument is invalid.
|
|
|
|
**DESCRIPTION:**
|
|
|
|
The ``pthread_attr_setdetachstate`` routine is used to value of the``detachstate`` attribute. This attribute controls whether the
|
|
thread is created in a detached state.
|
|
|
|
The ``detachstate`` can be either ``PTHREAD_CREATE_DETACHED`` or``PTHREAD_CREATE_JOINABLE``. The default value for all threads is``PTHREAD_CREATE_JOINABLE``.
|
|
|
|
**NOTES:**
|
|
|
|
If a thread is in a detached state,
|
|
then the use of the ID with the ``pthread_detach`` or``pthread_join`` routines is an error.
|
|
|
|
pthread_attr_getdetachstate - Get Detach State
|
|
----------------------------------------------
|
|
.. index:: pthread_attr_getdetachstate
|
|
.. index:: get detach state
|
|
|
|
**CALLING SEQUENCE:**
|
|
|
|
.. code:: c
|
|
|
|
#include <pthread.h>
|
|
int pthread_attr_getdetachstate(
|
|
const pthread_attr_t \*attr,
|
|
int \*detachstate
|
|
);
|
|
|
|
**STATUS CODES:**
|
|
|
|
*EINVAL*
|
|
The attribute pointer argument is invalid.
|
|
|
|
*EINVAL*
|
|
The attribute set is not initialized.
|
|
|
|
*EINVAL*
|
|
The detatchstate pointer argument is invalid.
|
|
|
|
**DESCRIPTION:**
|
|
|
|
The ``pthread_attr_getdetachstate`` routine is used to obtain the
|
|
current value of the ``detachstate`` attribute as specified
|
|
by the ``attr`` thread attribute object.
|
|
|
|
**NOTES:**
|
|
|
|
NONE
|
|
|
|
pthread_attr_setstacksize - Set Thread Stack Size
|
|
-------------------------------------------------
|
|
.. index:: pthread_attr_setstacksize
|
|
.. index:: set thread stack size
|
|
|
|
**CALLING SEQUENCE:**
|
|
|
|
.. code:: c
|
|
|
|
#include <pthread.h>
|
|
int pthread_attr_setstacksize(
|
|
pthread_attr_t \*attr,
|
|
size_t stacksize
|
|
);
|
|
|
|
**STATUS CODES:**
|
|
|
|
*EINVAL*
|
|
The attribute pointer argument is invalid.
|
|
|
|
*EINVAL*
|
|
The attribute set is not initialized.
|
|
|
|
**DESCRIPTION:**
|
|
|
|
The ``pthread_attr_setstacksize`` routine is used to set the``stacksize`` attribute in the ``attr`` thread attribute
|
|
object.
|
|
|
|
**NOTES:**
|
|
|
|
As required by POSIX, RTEMS defines the feature symbol``_POSIX_THREAD_ATTR_STACKSIZE`` to indicate that this
|
|
routine is supported.
|
|
|
|
If the specified stacksize is below the minimum required for this CPU
|
|
(``PTHREAD_STACK_MIN``, then the stacksize will be set to the minimum
|
|
for this CPU.
|
|
|
|
pthread_attr_getstacksize - Get Thread Stack Size
|
|
-------------------------------------------------
|
|
.. index:: pthread_attr_getstacksize
|
|
.. index:: get thread stack size
|
|
|
|
**CALLING SEQUENCE:**
|
|
|
|
.. code:: c
|
|
|
|
#include <pthread.h>
|
|
int pthread_attr_getstacksize(
|
|
const pthread_attr_t \*attr,
|
|
size_t \*stacksize
|
|
);
|
|
|
|
**STATUS CODES:**
|
|
|
|
*EINVAL*
|
|
The attribute pointer argument is invalid.
|
|
|
|
*EINVAL*
|
|
The attribute set is not initialized.
|
|
|
|
*EINVAL*
|
|
The stacksize pointer argument is invalid.
|
|
|
|
**DESCRIPTION:**
|
|
|
|
The ``pthread_attr_getstacksize`` routine is used to obtain the``stacksize`` attribute in the ``attr`` thread attribute
|
|
object.
|
|
|
|
**NOTES:**
|
|
|
|
As required by POSIX, RTEMS defines the feature symbol``_POSIX_THREAD_ATTR_STACKSIZE`` to indicate that this
|
|
routine is supported.
|
|
|
|
pthread_attr_setstackaddr - Set Thread Stack Address
|
|
----------------------------------------------------
|
|
.. index:: pthread_attr_setstackaddr
|
|
.. index:: set thread stack address
|
|
|
|
**CALLING SEQUENCE:**
|
|
|
|
.. code:: c
|
|
|
|
#include <pthread.h>
|
|
int pthread_attr_setstackaddr(
|
|
pthread_attr_t \*attr,
|
|
void \*stackaddr
|
|
);
|
|
|
|
**STATUS CODES:**
|
|
|
|
*EINVAL*
|
|
The attribute pointer argument is invalid.
|
|
|
|
*EINVAL*
|
|
The attribute set is not initialized.
|
|
|
|
**DESCRIPTION:**
|
|
|
|
The ``pthread_attr_setstackaddr`` routine is used to set the``stackaddr`` attribute in the ``attr`` thread attribute
|
|
object.
|
|
|
|
**NOTES:**
|
|
|
|
As required by POSIX, RTEMS defines the feature symbol``_POSIX_THREAD_ATTR_STACKADDR`` to indicate that this
|
|
routine is supported.
|
|
|
|
It is imperative to the proper operation of the system that
|
|
each thread have sufficient stack space.
|
|
|
|
pthread_attr_getstackaddr - Get Thread Stack Address
|
|
----------------------------------------------------
|
|
.. index:: pthread_attr_getstackaddr
|
|
.. index:: get thread stack address
|
|
|
|
**CALLING SEQUENCE:**
|
|
|
|
.. code:: c
|
|
|
|
#include <pthread.h>
|
|
int pthread_attr_getstackaddr(
|
|
const pthread_attr_t \*attr,
|
|
void \**stackaddr
|
|
);
|
|
|
|
**STATUS CODES:**
|
|
|
|
*EINVAL*
|
|
The attribute pointer argument is invalid.
|
|
|
|
*EINVAL*
|
|
The attribute set is not initialized.
|
|
|
|
*EINVAL*
|
|
The stackaddr pointer argument is invalid.
|
|
|
|
**DESCRIPTION:**
|
|
|
|
The ``pthread_attr_getstackaddr`` routine is used to obtain the``stackaddr`` attribute in the ``attr`` thread attribute
|
|
object.
|
|
|
|
**NOTES:**
|
|
|
|
As required by POSIX, RTEMS defines the feature symbol``_POSIX_THREAD_ATTR_STACKADDR`` to indicate that this
|
|
routine is supported.
|
|
|
|
pthread_attr_setscope - Set Thread Scheduling Scope
|
|
---------------------------------------------------
|
|
.. index:: pthread_attr_setscope
|
|
.. index:: set thread scheduling scope
|
|
|
|
**CALLING SEQUENCE:**
|
|
|
|
.. code:: c
|
|
|
|
#include <pthread.h>
|
|
int pthread_attr_setscope(
|
|
pthread_attr_t \*attr,
|
|
int contentionscope
|
|
);
|
|
|
|
**STATUS CODES:**
|
|
|
|
*EINVAL*
|
|
The attribute pointer argument is invalid.
|
|
|
|
*EINVAL*
|
|
The attribute set is not initialized.
|
|
|
|
*EINVAL*
|
|
The contention scope specified is not valid.
|
|
|
|
*ENOTSUP*
|
|
The contention scope specified (PTHREAD_SCOPE_SYSTEM) is not supported.
|
|
|
|
**DESCRIPTION:**
|
|
|
|
The ``pthread_attr_setscope`` routine is used to set the contention
|
|
scope field in the thread attribute object ``attr`` to the value
|
|
specified by ``contentionscope``.
|
|
|
|
The ``contentionscope`` must be either ``PTHREAD_SCOPE_SYSTEM``
|
|
to indicate that the thread is to be within system scheduling contention
|
|
or ``PTHREAD_SCOPE_PROCESS`` indicating that the thread is to be
|
|
within the process scheduling contention scope.
|
|
|
|
**NOTES:**
|
|
|
|
As required by POSIX, RTEMS defines the feature symbol``_POSIX_THREAD_PRIORITY_SCHEDULING`` to indicate that the
|
|
family of routines to which this routine belongs is supported.
|
|
|
|
pthread_attr_getscope - Get Thread Scheduling Scope
|
|
---------------------------------------------------
|
|
.. index:: pthread_attr_getscope
|
|
.. index:: get thread scheduling scope
|
|
|
|
**CALLING SEQUENCE:**
|
|
|
|
.. code:: c
|
|
|
|
#include <pthread.h>
|
|
int pthread_attr_getscope(
|
|
const pthread_attr_t \*attr,
|
|
int \*contentionscope
|
|
);
|
|
|
|
**STATUS CODES:**
|
|
|
|
*EINVAL*
|
|
The attribute pointer argument is invalid.
|
|
|
|
*EINVAL*
|
|
The attribute set is not initialized.
|
|
|
|
*EINVAL*
|
|
The contentionscope pointer argument is invalid.
|
|
|
|
**DESCRIPTION:**
|
|
|
|
The ``pthread_attr_getscope`` routine is used to obtain the
|
|
value of the contention scope field in the thread attributes
|
|
object ``attr``. The current value is returned in``contentionscope``.
|
|
|
|
**NOTES:**
|
|
|
|
As required by POSIX, RTEMS defines the feature symbol``_POSIX_THREAD_PRIORITY_SCHEDULING`` to indicate that the
|
|
family of routines to which this routine belongs is supported.
|
|
|
|
pthread_attr_setinheritsched - Set Inherit Scheduler Flag
|
|
---------------------------------------------------------
|
|
.. index:: pthread_attr_setinheritsched
|
|
.. index:: set inherit scheduler flag
|
|
|
|
**CALLING SEQUENCE:**
|
|
|
|
.. code:: c
|
|
|
|
#include <pthread.h>
|
|
int pthread_attr_setinheritsched(
|
|
pthread_attr_t \*attr,
|
|
int inheritsched
|
|
);
|
|
|
|
**STATUS CODES:**
|
|
|
|
*EINVAL*
|
|
The attribute pointer argument is invalid.
|
|
|
|
*EINVAL*
|
|
The attribute set is not initialized.
|
|
|
|
*EINVAL*
|
|
The specified scheduler inheritance argument is invalid.
|
|
|
|
**DESCRIPTION:**
|
|
|
|
The ``pthread_attr_setinheritsched`` routine is used to set the
|
|
inherit scheduler field in the thread attribute object ``attr`` to
|
|
the value specified by ``inheritsched``.
|
|
|
|
The ``contentionscope`` must be either ``PTHREAD_INHERIT_SCHED``
|
|
to indicate that the thread is to inherit the scheduling policy
|
|
and parameters fromthe creating thread, or ``PTHREAD_EXPLICIT_SCHED``
|
|
to indicate that the scheduling policy and parameters for this thread
|
|
are to be set from the corresponding values in the attributes object.
|
|
If ``contentionscope`` is ``PTHREAD_INHERIT_SCHED``, then the
|
|
scheduling attributes in the ``attr`` structure will be ignored
|
|
at thread creation time.
|
|
|
|
**NOTES:**
|
|
|
|
As required by POSIX, RTEMS defines the feature symbol``_POSIX_THREAD_PRIORITY_SCHEDULING`` to indicate that the
|
|
family of routines to which this routine belongs is supported.
|
|
|
|
pthread_attr_getinheritsched - Get Inherit Scheduler Flag
|
|
---------------------------------------------------------
|
|
.. index:: pthread_attr_getinheritsched
|
|
.. index:: get inherit scheduler flag
|
|
|
|
**CALLING SEQUENCE:**
|
|
|
|
.. code:: c
|
|
|
|
#include <pthread.h>
|
|
int pthread_attr_getinheritsched(
|
|
const pthread_attr_t \*attr,
|
|
int \*inheritsched
|
|
);
|
|
|
|
**STATUS CODES:**
|
|
|
|
*EINVAL*
|
|
The attribute pointer argument is invalid.
|
|
|
|
*EINVAL*
|
|
The attribute set is not initialized.
|
|
|
|
*EINVAL*
|
|
The inheritsched pointer argument is invalid.
|
|
|
|
**DESCRIPTION:**
|
|
|
|
The ``pthread_attr_getinheritsched`` routine is used to
|
|
object the current value of the inherit scheduler field in
|
|
the thread attribute object ``attr``.
|
|
|
|
**NOTES:**
|
|
|
|
As required by POSIX, RTEMS defines the feature symbol``_POSIX_THREAD_PRIORITY_SCHEDULING`` to indicate that the
|
|
family of routines to which this routine belongs is supported.
|
|
|
|
pthread_attr_setschedpolicy - Set Scheduling Policy
|
|
---------------------------------------------------
|
|
.. index:: pthread_attr_setschedpolicy
|
|
.. index:: set scheduling policy
|
|
|
|
**CALLING SEQUENCE:**
|
|
|
|
.. code:: c
|
|
|
|
#include <pthread.h>
|
|
int pthread_attr_setschedpolicy(
|
|
pthread_attr_t \*attr,
|
|
int policy
|
|
);
|
|
|
|
**STATUS CODES:**
|
|
|
|
*EINVAL*
|
|
The attribute pointer argument is invalid.
|
|
|
|
*EINVAL*
|
|
The attribute set is not initialized.
|
|
|
|
*ENOTSUP*
|
|
The specified scheduler policy argument is invalid.
|
|
|
|
**DESCRIPTION:**
|
|
|
|
The ``pthread_attr_setschedpolicy`` routine is used to set the
|
|
scheduler policy field in the thread attribute object ``attr`` to
|
|
the value specified by ``policy``.
|
|
|
|
Scheduling policies may be one of the following:
|
|
|
|
- ``SCHED_DEFAULT``
|
|
|
|
- ``SCHED_FIFO``
|
|
|
|
- ``SCHED_RR``
|
|
|
|
- ``SCHED_SPORADIC``
|
|
|
|
- ``SCHED_OTHER``
|
|
|
|
The precise meaning of each of these is discussed elsewhere in this
|
|
manual.
|
|
|
|
**NOTES:**
|
|
|
|
As required by POSIX, RTEMS defines the feature symbol``_POSIX_THREAD_PRIORITY_SCHEDULING`` to indicate that the
|
|
family of routines to which this routine belongs is supported.
|
|
|
|
pthread_attr_getschedpolicy - Get Scheduling Policy
|
|
---------------------------------------------------
|
|
.. index:: pthread_attr_getschedpolicy
|
|
.. index:: get scheduling policy
|
|
|
|
**CALLING SEQUENCE:**
|
|
|
|
.. code:: c
|
|
|
|
#include <pthread.h>
|
|
int pthread_attr_getschedpolicy(
|
|
const pthread_attr_t \*attr,
|
|
int \*policy
|
|
);
|
|
|
|
**STATUS CODES:**
|
|
|
|
*EINVAL*
|
|
The attribute pointer argument is invalid.
|
|
|
|
*EINVAL*
|
|
The attribute set is not initialized.
|
|
|
|
*EINVAL*
|
|
The specified scheduler policy argument pointer is invalid.
|
|
|
|
**DESCRIPTION:**
|
|
|
|
The ``pthread_attr_getschedpolicy`` routine is used to obtain the
|
|
scheduler policy field from the thread attribute object ``attr``.
|
|
The value of this field is returned in ``policy``.
|
|
|
|
**NOTES:**
|
|
|
|
As required by POSIX, RTEMS defines the feature symbol``_POSIX_THREAD_PRIORITY_SCHEDULING`` to indicate that the
|
|
family of routines to which this routine belongs is supported.
|
|
|
|
pthread_attr_setschedparam - Set Scheduling Parameters
|
|
------------------------------------------------------
|
|
.. index:: pthread_attr_setschedparam
|
|
.. index:: set scheduling parameters
|
|
|
|
**CALLING SEQUENCE:**
|
|
|
|
.. code:: c
|
|
|
|
#include <pthread.h>
|
|
int pthread_attr_setschedparam(
|
|
pthread_attr_t \*attr,
|
|
const struct sched_param param
|
|
);
|
|
|
|
**STATUS CODES:**
|
|
|
|
*EINVAL*
|
|
The attribute pointer argument is invalid.
|
|
|
|
*EINVAL*
|
|
The attribute set is not initialized.
|
|
|
|
*EINVAL*
|
|
The specified scheduler parameter argument is invalid.
|
|
|
|
**DESCRIPTION:**
|
|
|
|
The ``pthread_attr_setschedparam`` routine is used to set the
|
|
scheduler parameters field in the thread attribute object ``attr`` to
|
|
the value specified by ``param``.
|
|
|
|
**NOTES:**
|
|
|
|
As required by POSIX, RTEMS defines the feature symbol``_POSIX_THREAD_PRIORITY_SCHEDULING`` to indicate that the
|
|
family of routines to which this routine belongs is supported.
|
|
|
|
pthread_attr_getschedparam - Get Scheduling Parameters
|
|
------------------------------------------------------
|
|
.. index:: pthread_attr_getschedparam
|
|
.. index:: get scheduling parameters
|
|
|
|
**CALLING SEQUENCE:**
|
|
|
|
.. code:: c
|
|
|
|
#include <pthread.h>
|
|
int pthread_attr_getschedparam(
|
|
const pthread_attr_t \*attr,
|
|
struct sched_param \*param
|
|
);
|
|
|
|
**STATUS CODES:**
|
|
|
|
*EINVAL*
|
|
The attribute pointer argument is invalid.
|
|
|
|
*EINVAL*
|
|
The attribute set is not initialized.
|
|
|
|
*EINVAL*
|
|
The specified scheduler parameter argument pointer is invalid.
|
|
|
|
**DESCRIPTION:**
|
|
|
|
The ``pthread_attr_getschedparam`` routine is used to obtain the
|
|
scheduler parameters field from the thread attribute object ``attr``.
|
|
The value of this field is returned in ``param``.
|
|
|
|
**NOTES:**
|
|
|
|
As required by POSIX, RTEMS defines the feature symbol``_POSIX_THREAD_PRIORITY_SCHEDULING`` to indicate that the
|
|
family of routines to which this routine belongs is supported.
|
|
|
|
pthread_attr_getaffinity_np - Get Thread Affinity Attribute
|
|
-----------------------------------------------------------
|
|
|
|
**CALLING SEQUENCE:**
|
|
|
|
.. code:: c
|
|
|
|
#define _GNU_SOURCE
|
|
#include <pthread.h>
|
|
int pthread_attr_getaffinity_np(
|
|
const pthread_attr_t \*attr,
|
|
size_t cpusetsize,
|
|
cpu_set_t \*cpuset
|
|
);
|
|
|
|
**STATUS CODES:**
|
|
|
|
*EFAULT*
|
|
The attribute pointer argument is invalid.
|
|
|
|
*EFAULT*
|
|
The cpuset pointer argument is invalid.
|
|
|
|
*EINVAL*
|
|
The ``cpusetsize`` does not match the value of ``affinitysetsize``
|
|
field in the thread attribute object.
|
|
|
|
**DESCRIPTION:**
|
|
|
|
The ``pthread_attr_getaffinity_np`` routine is used to obtain the``affinityset`` field from the thread attribute object ``attr``.
|
|
The value of this field is returned in ``cpuset``.
|
|
|
|
**NOTES:**
|
|
|
|
NONE
|
|
|
|
pthread_attr_setaffinity_np - Set Thread Affinity Attribute
|
|
-----------------------------------------------------------
|
|
|
|
**CALLING SEQUENCE:**
|
|
|
|
.. code:: c
|
|
|
|
#define _GNU_SOURCE
|
|
#include <pthread.h>
|
|
int pthread_attr_setaffinity_np(
|
|
pthread_attr_t \*attr,
|
|
size_t cpusetsize,
|
|
const cpu_set_t \*cpuset
|
|
);
|
|
|
|
**STATUS CODES:**
|
|
|
|
*EFAULT*
|
|
The attribute pointer argument is invalid.
|
|
|
|
*EFAULT*
|
|
The cpuset pointer argument is invalid.
|
|
|
|
*EINVAL*
|
|
The ``cpusetsize`` does not match the value of ``affinitysetsize``
|
|
field in the thread attribute object.
|
|
|
|
*EINVAL*
|
|
The ``cpuset`` did not select a valid cpu.
|
|
|
|
*EINVAL*
|
|
The ``cpuset`` selected a cpu that was invalid.
|
|
|
|
**DESCRIPTION:**
|
|
|
|
The ``pthread_attr_setaffinity_np`` routine is used to set the``affinityset`` field in the thread attribute object ``attr``.
|
|
The value of this field is returned in ``cpuset``.
|
|
|
|
**NOTES:**
|
|
|
|
NONE
|
|
|
|
pthread_create - Create a Thread
|
|
--------------------------------
|
|
.. index:: pthread_create
|
|
.. index:: create a thread
|
|
|
|
**CALLING SEQUENCE:**
|
|
|
|
.. code:: c
|
|
|
|
#include <pthread.h>
|
|
int pthread_create(
|
|
pthread_t \*thread,
|
|
const pthread_attr_t \*attr,
|
|
void (\*start_routine)( void \*),
|
|
void \*arg
|
|
);
|
|
|
|
**STATUS CODES:**
|
|
|
|
*EINVAL*
|
|
The attribute set is not initialized.
|
|
|
|
*EINVAL*
|
|
The user specified a stack address and the size of the area was not
|
|
large enough to meet this processor's minimum stack requirements.
|
|
|
|
*EINVAL*
|
|
The specified scheduler inheritance policy was invalid.
|
|
|
|
*ENOTSUP*
|
|
The specified contention scope was PTHREAD_SCOPE_PROCESS.
|
|
|
|
*EINVAL*
|
|
The specified thread priority was invalid.
|
|
|
|
*EINVAL*
|
|
The specified scheduling policy was invalid.
|
|
|
|
*EINVAL*
|
|
The scheduling policy was SCHED_SPORADIC and the specified replenishment
|
|
period is less than the initial budget.
|
|
|
|
*EINVAL*
|
|
The scheduling policy was SCHED_SPORADIC and the specified low priority
|
|
is invalid.
|
|
|
|
*EAGAIN*
|
|
The system lacked the necessary resources to create another thread, or the
|
|
self imposed limit on the total number of threads in a process
|
|
PTHREAD_THREAD_MAX would be exceeded.
|
|
|
|
*EINVAL*
|
|
Invalid argument passed.
|
|
|
|
**DESCRIPTION:**
|
|
|
|
The ``pthread_create`` routine is used to create a new thread with
|
|
the attributes specified by ``attr``. If the ``attr`` argument
|
|
is ``NULL``, then the default attribute set will be used. Modification
|
|
of the contents of ``attr`` after this thread is created does not
|
|
have an impact on this thread.
|
|
|
|
The thread begins execution at the address specified by ``start_routine``
|
|
with ``arg`` as its only argument. If ``start_routine`` returns,
|
|
then it is functionally equivalent to the thread executing the``pthread_exit`` service.
|
|
|
|
Upon successful completion, the ID of the created thread is returned in the``thread`` argument.
|
|
|
|
**NOTES:**
|
|
|
|
There is no concept of a single main thread in RTEMS as there is in
|
|
a tradition UNIX system. POSIX requires that the implicit return of
|
|
the main thread results in the same effects as if there were a call
|
|
to ``exit``. This does not occur in RTEMS.
|
|
|
|
The signal mask of the newly created thread is inherited from its
|
|
creator and the set of pending signals for this thread is empty.
|
|
|
|
pthread_exit - Terminate the Current Thread
|
|
-------------------------------------------
|
|
.. index:: pthread_exit
|
|
.. index:: terminate the current thread
|
|
|
|
**CALLING SEQUENCE:**
|
|
|
|
.. code:: c
|
|
|
|
#include <pthread.h>
|
|
void pthread_exit(
|
|
void \*status
|
|
);
|
|
|
|
**STATUS CODES:**
|
|
|
|
*NONE*
|
|
|
|
**DESCRIPTION:**
|
|
|
|
The ``pthread_exit`` routine is used to terminate the calling thread.
|
|
The ``status`` is made available to any successful join with the
|
|
terminating thread.
|
|
|
|
When a thread returns from its start routine, it results in an
|
|
implicit call to the ``pthread_exit`` routine with the return
|
|
value of the function serving as the argument to ``pthread_exit``.
|
|
|
|
**NOTES:**
|
|
|
|
Any cancellation cleanup handlers that hace been pushed and not yet popped
|
|
shall be popped in reverse of the order that they were pushed. After
|
|
all cancellation cleanup handlers have been executed, if the
|
|
thread has any thread-specific data, destructors for that data will
|
|
be invoked.
|
|
|
|
Thread termination does not release or free any application visible
|
|
resources including byt not limited to mutexes, file descriptors, allocated
|
|
memory, etc.. Similarly, exitting a thread does not result in any
|
|
process-oriented cleanup activity.
|
|
|
|
There is no concept of a single main thread in RTEMS as there is in
|
|
a tradition UNIX system. POSIX requires that the implicit return of
|
|
the main thread results in the same effects as if there were a call
|
|
to ``exit``. This does not occur in RTEMS.
|
|
|
|
All access to any automatic variables allocated by the threads is lost
|
|
when the thread exits. Thus references (i.e. pointers) to local variables
|
|
of a thread should not be used in a global manner without care. As
|
|
a specific example, a pointer to a local variable should NOT be used
|
|
as the return value.
|
|
|
|
pthread_detach - Detach a Thread
|
|
--------------------------------
|
|
.. index:: pthread_detach
|
|
.. index:: detach a thread
|
|
|
|
**CALLING SEQUENCE:**
|
|
|
|
.. code:: c
|
|
|
|
#include <pthread.h>
|
|
int pthread_detach(
|
|
pthread_t thread
|
|
);
|
|
|
|
**STATUS CODES:**
|
|
|
|
*ESRCH*
|
|
The thread specified is invalid.
|
|
|
|
*EINVAL*
|
|
The thread specified is not a joinable thread.
|
|
|
|
**DESCRIPTION:**
|
|
|
|
The ``pthread_detach`` routine is used to to indicate that storage
|
|
for ``thread`` can be reclaimed when the thread terminates without
|
|
another thread joinging with it.
|
|
|
|
**NOTES:**
|
|
|
|
If any threads have previously joined with the specified thread, then they
|
|
will remain joined with that thread. Any subsequent calls to``pthread_join`` on the specified thread will fail.
|
|
|
|
.. COMMENT: pthread_getattr_np
|
|
|
|
pthread_getattr_np - Get Thread Attributes
|
|
------------------------------------------
|
|
.. index:: pthread_getattr_np
|
|
.. index:: get thread attributes
|
|
|
|
**CALLING SEQUENCE:**
|
|
|
|
.. code:: c
|
|
|
|
#define _GNU_SOURCE
|
|
#include <pthread.h>
|
|
int pthread_getattr_np(
|
|
pthread_t thread,
|
|
pthread_attr_t \*attr
|
|
);
|
|
|
|
**STATUS CODES:**
|
|
|
|
*ESRCH*
|
|
The thread specified is invalid.
|
|
|
|
*EINVAL*
|
|
The attribute pointer argument is invalid.
|
|
|
|
**DESCRIPTION:**
|
|
|
|
The ``pthread_getattr_np`` routine is used to obtain the
|
|
attributes associated with ``thread``.
|
|
|
|
**NOTES:**
|
|
|
|
Modification of the execution modes and priority through the Classic API
|
|
may result in a combination that is not representable in the POSIX API.
|
|
|
|
pthread_join - Wait for Thread Termination
|
|
------------------------------------------
|
|
.. index:: pthread_join
|
|
.. index:: wait for thread termination
|
|
|
|
**CALLING SEQUENCE:**
|
|
|
|
.. code:: c
|
|
|
|
#include <pthread.h>
|
|
int pthread_join(
|
|
pthread_t thread,
|
|
void \**value_ptr
|
|
);
|
|
|
|
**STATUS CODES:**
|
|
|
|
*ESRCH*
|
|
The thread specified is invalid.
|
|
|
|
*EINVAL*
|
|
The thread specified is not a joinable thread.
|
|
|
|
*EDEADLK*
|
|
A deadlock was detected or thread is the calling thread.
|
|
|
|
**DESCRIPTION:**
|
|
|
|
The ``pthread_join`` routine suspends execution of the calling thread
|
|
until ``thread`` terminates. If ``thread`` has already terminated,
|
|
then this routine returns immediately. The value returned by ``thread``
|
|
(i.e. passed to ``pthread_exit`` is returned in ``value_ptr``.
|
|
|
|
When this routine returns, then ``thread`` has been terminated.
|
|
|
|
**NOTES:**
|
|
|
|
The results of multiple simultaneous joins on the same thread is undefined.
|
|
|
|
If any threads have previously joined with the specified thread, then they
|
|
will remain joined with that thread. Any subsequent calls to``pthread_join`` on the specified thread will fail.
|
|
|
|
If value_ptr is NULL, then no value is returned.
|
|
|
|
pthread_self - Get Thread ID
|
|
----------------------------
|
|
.. index:: pthread_self
|
|
.. index:: get thread id
|
|
|
|
**CALLING SEQUENCE:**
|
|
|
|
.. code:: c
|
|
|
|
#include <pthread.h>
|
|
pthread_t pthread_self( void );
|
|
|
|
**STATUS CODES:**
|
|
|
|
The value returned is the ID of the calling thread.
|
|
|
|
**DESCRIPTION:**
|
|
|
|
This routine returns the ID of the calling thread.
|
|
|
|
**NOTES:**
|
|
|
|
NONE
|
|
|
|
pthread_equal - Compare Thread IDs
|
|
----------------------------------
|
|
.. index:: pthread_equal
|
|
.. index:: compare thread ids
|
|
|
|
**CALLING SEQUENCE:**
|
|
|
|
.. code:: c
|
|
|
|
#include <pthread.h>
|
|
int pthread_equal(
|
|
pthread_t t1,
|
|
pthread_t t2
|
|
);
|
|
|
|
**STATUS CODES:**
|
|
|
|
*zero*
|
|
The thread ids are not equal.
|
|
|
|
*non-zero*
|
|
The thread ids are equal.
|
|
|
|
**DESCRIPTION:**
|
|
|
|
The ``pthread_equal`` routine is used to compare two thread
|
|
IDs and determine if they are equal.
|
|
|
|
**NOTES:**
|
|
|
|
The behavior is undefined if the thread IDs are not valid.
|
|
|
|
pthread_once - Dynamic Package Initialization
|
|
---------------------------------------------
|
|
.. index:: pthread_once
|
|
.. index:: dynamic package initialization
|
|
|
|
**CALLING SEQUENCE:**
|
|
|
|
.. code:: c
|
|
|
|
#include <pthread.h>
|
|
pthread_once_t once_control = PTHREAD_ONCE_INIT;
|
|
int pthread_once(
|
|
pthread_once_t \*once_control,
|
|
void (\*init_routine)(void)
|
|
);
|
|
|
|
**STATUS CODES:**
|
|
|
|
NONE
|
|
|
|
**DESCRIPTION:**
|
|
|
|
The ``pthread_once`` routine is used to provide controlled initialization
|
|
of variables. The first call to ``pthread_once`` by any thread with the
|
|
same ``once_control`` will result in the ``init_routine`` being
|
|
invoked with no arguments. Subsequent calls to ``pthread_once`` with
|
|
the same ``once_control`` will have no effect.
|
|
|
|
The ``init_routine`` is guaranteed to have run to completion when
|
|
this routine returns to the caller.
|
|
|
|
**NOTES:**
|
|
|
|
The behavior of ``pthread_once`` is undefined if ``once_control``
|
|
is automatic storage (i.e. on a task stack) or is not initialized using``PTHREAD_ONCE_INIT``.
|
|
|
|
pthread_setschedparam - Set Thread Scheduling Parameters
|
|
--------------------------------------------------------
|
|
.. index:: pthread_setschedparam
|
|
.. index:: set thread scheduling parameters
|
|
|
|
**CALLING SEQUENCE:**
|
|
|
|
.. code:: c
|
|
|
|
#include <pthread.h>
|
|
int pthread_setschedparam(
|
|
pthread_t thread,
|
|
int policy,
|
|
struct sched_param \*param
|
|
);
|
|
|
|
**STATUS CODES:**
|
|
|
|
*EINVAL*
|
|
The scheduling parameters indicated by the parameter param is invalid.
|
|
|
|
*EINVAL*
|
|
The value specified by policy is invalid.
|
|
|
|
*EINVAL*
|
|
The scheduling policy was SCHED_SPORADIC and the specified replenishment
|
|
period is less than the initial budget.
|
|
|
|
*EINVAL*
|
|
The scheduling policy was SCHED_SPORADIC and the specified low priority
|
|
is invalid.
|
|
|
|
*ESRCH*
|
|
The thread indicated was invalid.
|
|
|
|
**DESCRIPTION:**
|
|
|
|
The ``pthread_setschedparam`` routine is used to set the
|
|
scheduler parameters currently associated with the thread specified
|
|
by ``thread`` to the policy specified by ``policy``. The
|
|
contents of ``param`` are interpreted based upon the ``policy``
|
|
argument.
|
|
|
|
**NOTES:**
|
|
|
|
As required by POSIX, RTEMS defines the feature symbol``_POSIX_THREAD_PRIORITY_SCHEDULING`` to indicate that the
|
|
family of routines to which this routine belongs is supported.
|
|
|
|
pthread_getschedparam - Get Thread Scheduling Parameters
|
|
--------------------------------------------------------
|
|
.. index:: pthread_getschedparam
|
|
.. index:: get thread scheduling parameters
|
|
|
|
**CALLING SEQUENCE:**
|
|
|
|
.. code:: c
|
|
|
|
#include <pthread.h>
|
|
int pthread_getschedparam(
|
|
pthread_t thread,
|
|
int \*policy,
|
|
struct sched_param \*param
|
|
);
|
|
|
|
**STATUS CODES:**
|
|
|
|
*EINVAL*
|
|
The policy pointer argument is invalid.
|
|
|
|
*EINVAL*
|
|
The scheduling parameters pointer argument is invalid.
|
|
|
|
*ESRCH*
|
|
The thread indicated by the parameter thread is invalid.
|
|
|
|
**DESCRIPTION:**
|
|
|
|
The ``pthread_getschedparam`` routine is used to obtain the
|
|
scheduler policy and parameters associated with ``thread``.
|
|
The current policy and associated parameters values returned in``policy`` and ``param``, respectively.
|
|
|
|
**NOTES:**
|
|
|
|
As required by POSIX, RTEMS defines the feature symbol``_POSIX_THREAD_PRIORITY_SCHEDULING`` to indicate that the
|
|
family of routines to which this routine belongs is supported.
|
|
|
|
.. COMMENT: pthread_getaffinity_np
|
|
|
|
pthread_getaffinity_np - Get Thread Affinity
|
|
--------------------------------------------
|
|
|
|
**CALLING SEQUENCE:**
|
|
|
|
.. code:: c
|
|
|
|
#define _GNU_SOURCE
|
|
#include <pthread.h>
|
|
int pthread_getaffinity_np(
|
|
const pthread_t id,
|
|
size_t cpusetsize,
|
|
cpu_set_t \*cpuset
|
|
);
|
|
|
|
**STATUS CODES:**
|
|
|
|
*EFAULT*
|
|
The cpuset pointer argument is invalid.
|
|
|
|
*EINVAL*
|
|
The ``cpusetsize`` does not match the value of ``affinitysetsize``
|
|
field in the thread attribute object.
|
|
|
|
**DESCRIPTION:**
|
|
|
|
The ``pthread_getaffinity_np`` routine is used to obtain the``affinity.set`` field from the thread control object associated
|
|
with the ``id``. The value of this field is returned in ``cpuset``.
|
|
|
|
**NOTES:**
|
|
|
|
NONE
|
|
|
|
.. COMMENT: pthread_setaffinity_np
|
|
|
|
pthread_setaffinity_np - Set Thread Affinity
|
|
--------------------------------------------
|
|
|
|
**CALLING SEQUENCE:**
|
|
|
|
.. code:: c
|
|
|
|
#define _GNU_SOURCE
|
|
#include <pthread.h>
|
|
int pthread_setaffinity_np(
|
|
pthread_t id,
|
|
size_t cpusetsize,
|
|
const cpu_set_t \*cpuset
|
|
);
|
|
|
|
**STATUS CODES:**
|
|
|
|
*EFAULT*
|
|
The cpuset pointer argument is invalid.
|
|
|
|
*EINVAL*
|
|
The ``cpusetsize`` does not match the value of ``affinitysetsize``
|
|
field in the thread attribute object.
|
|
|
|
*EINVAL*
|
|
The ``cpuset`` did not select a valid cpu.
|
|
|
|
*EINVAL*
|
|
The ``cpuset`` selected a cpu that was invalid.
|
|
|
|
**DESCRIPTION:**
|
|
|
|
The ``pthread_setaffinity_np`` routine is used to set the``affinityset`` field of the thread object ``id``.
|
|
The value of this field is returned in ``cpuset``
|
|
|
|
**NOTES:**
|
|
|
|
NONE
|
|
|
|
.. COMMENT: COPYRIGHT (c) 1988-2002.
|
|
|
|
.. COMMENT: On-Line Applications Research Corporation (OAR).
|
|
|
|
.. COMMENT: All rights reserved.
|
|
|