From ae68ff085724dd35d60151bd153e80b8b0776873 Mon Sep 17 00:00:00 2001 From: Joel Sherrill Date: Tue, 27 May 1997 12:40:11 +0000 Subject: Initial revision --- doc/posix_users/Makefile | 59 ++ doc/posix_users/base.texi | 96 ++++ doc/posix_users/clock.texi | 262 +++++++++ doc/posix_users/cond.texi | 384 +++++++++++++ doc/posix_users/key.texi | 177 ++++++ doc/posix_users/mutex.texi | 640 +++++++++++++++++++++ doc/posix_users/posix_test_plan.texi | 123 ++++ doc/posix_users/preface.texi | 12 + doc/posix_users/sched.texi | 226 ++++++++ doc/posix_users/signal.texi | 689 +++++++++++++++++++++++ doc/posix_users/thread.texi | 1023 ++++++++++++++++++++++++++++++++++ 11 files changed, 3691 insertions(+) create mode 100644 doc/posix_users/Makefile create mode 100644 doc/posix_users/base.texi create mode 100644 doc/posix_users/clock.texi create mode 100644 doc/posix_users/cond.texi create mode 100644 doc/posix_users/key.texi create mode 100644 doc/posix_users/mutex.texi create mode 100644 doc/posix_users/posix_test_plan.texi create mode 100644 doc/posix_users/preface.texi create mode 100644 doc/posix_users/sched.texi create mode 100644 doc/posix_users/signal.texi create mode 100644 doc/posix_users/thread.texi (limited to 'doc/posix_users') diff --git a/doc/posix_users/Makefile b/doc/posix_users/Makefile new file mode 100644 index 0000000000..65977364ad --- /dev/null +++ b/doc/posix_users/Makefile @@ -0,0 +1,59 @@ +# +# COPYRIGHT (c) 1996. +# On-Line Applications Research Corporation (OAR). +# All rights reserved. +# + +include ../Make.config + +PROJECT=posix +DOCNAME=posix_test_plan + +all: + +COMMON_FILES=../common/cpright.texi +FILES= clock.texi cond.texi key.texi mutex.texi $(DOCNAME).texi preface.texi \ + sched.texi signal.texi thread.texi $(COMMON_FILES) + +all: + +INFOFILES=$(wildcard $(PROJECT) $(PROJECT)-*) + +info: $(DOCNAME) +# cp $(DOCNAME) $(DOCNAME)-* $(INFO_INSTALL) + cp $(DOCNAME) $(INFO_INSTALL) + +posix_test_plan: $(FILES) + $(MAKEINFO) $(DOCNAME).texi + +vinfo: info + $(INFO) -f ./$(DOCNAME) + +dvi: $(DOCNAME).dvi +ps: $(DOCNAME).ps + +$(DOCNAME).ps: $(DOCNAME).dvi + dvips -o $(DOCNAME).ps $(DOCNAME).dvi + cp $(PROJECT).ps $(PS_INSTALL) + +dv: dvi + $(XDVI) $(DOCNAME).dvi + +view: ps + $(GHOSTVIEW) $(DOCNAME).ps + +$(DOCNAME).dvi: $(FILES) + $(TEXI2DVI) $(DOCNAME).texi + +html: + -mkdir $(WWW_INSTALL)/$(DOCNAME) + $(TEXI2WWW) $(TEXI2WWW_ARGS) -dir $(WWW_INSTALL)/c_$(PROJECT) \ + $(PROJECT).texi + cp ../rtems.html $(WWW_INSTALL) + + +clean: + rm -f *.o $(PROG) *.txt core *.html + rm -f *.dvi *.ps *.log *.aux *.cp *.fn *.ky *.pg *.toc *.tp *.vr $(BASE) + rm -f $(DOCNAME) $(DOCNAME)-* _* + diff --git a/doc/posix_users/base.texi b/doc/posix_users/base.texi new file mode 100644 index 0000000000..ee0c280d63 --- /dev/null +++ b/doc/posix_users/base.texi @@ -0,0 +1,96 @@ +@c +@c COPYRIGHT (c) 1996. +@c On-Line Applications Research Corporation (OAR). +@c All rights reserved. +@c + +@ifinfo +@node Mutex Manager, Mutex Manager Introduction, Preface, Top +@end ifinfo +@chapter Mutex Manager +@ifinfo +@menu +* Mutex Manager Introduction:: +* Mutex Manager Background:: +* Mutex Manager Operations:: +* Mutex Manager Directives:: +@end menu +@end ifinfo + +@ifinfo +@node Mutex Manager Introduction, Mutex Manager Background, Mutex Manager, Mutex Manager +@end ifinfo +@section Introduction + +The mutex manager ... + +The directives provided by the mutex manager are: + +@itemize @bullet +@item @code{sigaddset} - +@item @code{sigdelset} - +@item @code{sigfillset} - +@item @code{sigismember} - +@item @code{sigemptyset} - +@item @code{sigaction} - +@item @code{pthread_kill} - +@item @code{pthread_sigmask} - +@item @code{kill} - +@item @code{sigwait} - +@end itemize + +@ifinfo +@node Mutex Manager Background, Mutex Manager Operations, Mutex Manager Introduction, Mutex Manager +@end ifinfo +@section Background + +@ifinfo +@node Mutex Manager Operations, Mutex Manager Directives, Mutex Manager Background, Mutex Manager +@end ifinfo +@section Operations + +@ifinfo +@node Mutex Manager Directives, sigaddset, Mutex Manager Operations, Mutex Manager +@end ifinfo +@section Directives +@ifinfo +@menu +* sigaddset:: +* sigdelset:: +* sigfillset:: +* sigismember:: +* sigemptyset:: +* sigaction:: +* pthread_kill:: +* pthread_sigmask:: +* kill:: +* sigwait:: +@end menu +@end ifinfo + +This section details the mutex manager's directives. +A subsection is dedicated to each of this manager's directives +and describes the calling sequence, related constants, usage, +and status codes. + +@page +@ifinfo +@node sigaddset, sigdelset, Mutex Manager Directives, Mutex Manager Directives +@end ifinfo +@subsection sigaddset + +@subheading CALLING SEQUENCE: + +@example +int sigaddset( + sigset_t *set, + int signo +); +@end example + +@subheading STATUS CODES: + +@subheading DESCRIPTION: + +@subheading NOTES: + diff --git a/doc/posix_users/clock.texi b/doc/posix_users/clock.texi new file mode 100644 index 0000000000..1b64d91a6b --- /dev/null +++ b/doc/posix_users/clock.texi @@ -0,0 +1,262 @@ +@c +@c COPYRIGHT (c) 1996. +@c On-Line Applications Research Corporation (OAR). +@c All rights reserved. +@c + +@ifinfo +@node Clock Manager, Clock Manager Introduction, pthread_getspecific, Top +@end ifinfo +@chapter Clock Manager +@ifinfo +@menu +* Clock Manager Introduction:: +* Clock Manager Background:: +* Clock Manager Operations:: +* Clock Manager Directives:: +@end menu +@end ifinfo + +@ifinfo +@node Clock Manager Introduction, Clock Manager Background, Clock Manager, Clock Manager +@end ifinfo +@section Introduction + +The clock manager ... + +The directives provided by the clock manager are: + +@itemize @bullet +@item @code{clock_gettime} - +@item @code{clock_settime} - +@item @code{clock_getres} - +@item @code{nanosleep} - +@item @code{time} - +@end itemize + +@ifinfo +@node Clock Manager Background, Clock Manager Operations, Clock Manager Introduction, Clock Manager +@end ifinfo +@section Background + +@ifinfo +@node Clock Manager Operations, Clock Manager Directives, Clock Manager Background, Clock Manager +@end ifinfo +@section Operations + +@ifinfo +@node Clock Manager Directives, clock_gettime, Clock Manager Operations, Clock Manager +@end ifinfo +@section Directives +@ifinfo +@menu +* clock_gettime:: +* clock_settime:: +* clock_getres:: +* sleep:: +* nanosleep:: +* time:: +@end menu +@end ifinfo + +This section details the clock manager's directives. +A subsection is dedicated to each of this manager's directives +and describes the calling sequence, related constants, usage, +and status codes. + +@page +@ifinfo +@node clock_gettime, clock_settime, Clock Manager Directives, Clock Manager Directives +@end ifinfo +@subsection clock_gettime + +@subheading CALLING SEQUENCE: + +@example +#include + +int clock_gettime( + clockid_t clock_id, + struct timespec *tp +); +@end example + +@subheading STATUS CODES: + +On error, this routine returns -1 and sets errno to one of the following: + +@table @b +@item EINVAL +The tp pointer parameter is invalid. + +@item EINVAL +The clock_id specified is invalid. +@end table + +@subheading DESCRIPTION: + +@subheading NOTES: + +@page +@ifinfo +@node clock_settime, clock_getres, clock_gettime, Clock Manager Directives +@end ifinfo +@subsection clock_settime + +@subheading CALLING SEQUENCE: + +@example +#include + +int clock_settime( + clockid_t clock_id, + const struct timespec *tp +); +@end example + +@subheading STATUS CODES: + +On error, this routine returns -1 and sets errno to one of the following: + +@table @b +@item EINVAL +The tp pointer parameter is invalid. + +@item EINVAL +The clock_id specified is invalid. + +@item EINVAL +The contents of the tp structure are invalid. + +@end table + +@subheading DESCRIPTION: + +@subheading NOTES: + +@page +@ifinfo +@node clock_getres, sleep, clock_settime, Clock Manager Directives +@end ifinfo +@subsection clock_getres + +@subheading CALLING SEQUENCE: + +@example +#include + +int clock_getres( + clockid_t clock_id, + struct timespec *res +); +@end example + +@subheading STATUS CODES: + +On error, this routine returns -1 and sets errno to one of the following: + +@table @b +@item EINVAL +The res pointer parameter is invalid. + +@item EINVAL +The clock_id specified is invalid. + +@end table + +@subheading DESCRIPTION: + +@subheading NOTES: + +If res is NULL, then the resolution is not returned. + +@page +@ifinfo +@node sleep, nanosleep, clock_getres, Clock Manager Directives +@end ifinfo +@subsection sleep + +@subheading CALLING SEQUENCE: + +@example +#include + +unsigned int sleep( + unsigned int seconds +); +@end example + +@subheading STATUS CODES: + +This routine returns the number of unslept seconds. + +@subheading DESCRIPTION: + +@subheading NOTES: + +This call is interruptible by a signal. + +@page +@ifinfo +@node nanosleep, time, sleep, Clock Manager Directives +@end ifinfo +@subsection nanosleep + +@subheading CALLING SEQUENCE: + +@example +#include + +int nanosleep( + const struct timespec *rqtp, + struct timespec *rmtp +); +@end example + +@subheading STATUS CODES: + +On error, this routine returns -1 and sets errno to one of the following: + +@table @b +@item EINTR +The routine was interrupted by a signal. + +@item EAGAIN +The requested sleep period specified negative seconds or nanoseconds. + +@item EINVAL +The requested sleep period specified an invalid number for the nanoseconds +field. + +@end table + +@subheading DESCRIPTION: + +@subheading NOTES: + +This call is interruptible by a signal. + +@page +@ifinfo +@node time, Scheduler Manager, nanosleep, Clock Manager Directives +@end ifinfo +@subsection nanosleep + +@subheading time SEQUENCE: + +@example +#include + +int time( + time_t *tloc +); +@end example + +@subheading STATUS CODES: + +This routine returns the number of seconds since the Epoch. + +@subheading DESCRIPTION: + +@subheading NOTES: + diff --git a/doc/posix_users/cond.texi b/doc/posix_users/cond.texi new file mode 100644 index 0000000000..284f0793a9 --- /dev/null +++ b/doc/posix_users/cond.texi @@ -0,0 +1,384 @@ +@c +@c COPYRIGHT (c) 1996. +@c On-Line Applications Research Corporation (OAR). +@c All rights reserved. +@c + +@ifinfo +@node Condition Variable Manager, Condition Variable Manager Introduction, pthread_mutex_getprioceiling, Top +@end ifinfo +@chapter Condition Variable Manager +@ifinfo +@menu +* Condition Variable Manager Introduction:: +* Condition Variable Manager Background:: +* Condition Variable Manager Operations:: +* Condition Variable Manager Directives:: +@end menu +@end ifinfo + +@ifinfo +@node Condition Variable Manager Introduction, Condition Variable Manager Background, Condition Variable Manager, Condition Variable Manager +@end ifinfo +@section Introduction + +The condition variable manager ... + +The directives provided by the condition variable manager are: + +@itemize @bullet +@item @code{pthread_condattr_init} - +@item @code{pthread_condattr_destroy} - +@item @code{pthread_condattr_setpshared} - +@item @code{pthread_condattr_getpshared} - +@item @code{pthread_cond_init} - +@item @code{pthread_cond_destroy} - +@item @code{pthread_cond_signal} - +@item @code{pthread_cond_broadcast} - +@item @code{pthread_cond_wait} - +@item @code{pthread_cond_timedwait} - +@end itemize + +@ifinfo +@node Condition Variable Manager Background, Condition Variable Manager Operations, Condition Variable Manager Introduction, Condition Variable Manager +@end ifinfo +@section Background + +@ifinfo +@node Condition Variable Manager Operations, Condition Variable Manager Directives, Condition Variable Manager Background, Condition Variable Manager +@end ifinfo +@section Operations + +@ifinfo +@node Condition Variable Manager Directives, pthread_condattr_init, Condition Variable Manager Operations, Condition Variable Manager +@end ifinfo +@section Directives +@ifinfo +@menu +* pthread_condattr_init:: +* pthread_condattr_destroy:: +* pthread_condattr_setpshared:: +* pthread_condattr_getpshared:: +* pthread_cond_init:: +* pthread_cond_destroy:: +* pthread_cond_signal:: +* pthread_cond_broadcast:: +* pthread_cond_wait:: +* pthread_cond_timedwait:: +@end menu +@end ifinfo + +This section details the condition variable manager's directives. +A subsection is dedicated to each of this manager's directives +and describes the calling sequence, related constants, usage, +and status codes. + +@page +@ifinfo +@node pthread_condattr_init, pthread_condattr_destroy, Condition Variable Manager Directives, Condition Variable Manager Directives +@end ifinfo +@subsection pthread_condattr_init + +@subheading CALLING SEQUENCE: + +@example +#include + +int pthread_condattr_init( + pthread_condattr_t *attr +); +@end example + +@subheading STATUS CODES: +@table @b +@item ENOMEM +Insufficient memory is available to initialize the condition variable +attributes object. + +@end table + +@subheading DESCRIPTION: + +@subheading NOTES: + +@page +@ifinfo +@node pthread_condattr_destroy, pthread_condattr_setpshared, pthread_condattr_init, Condition Variable Manager Directives +@end ifinfo +@subsection pthread_condattr_destroy + +@subheading CALLING SEQUENCE: + +@example +#include + +int pthread_condattr_destroy( + pthread_condattr_t *attr +); +@end example + +@subheading STATUS CODES: +@table @b +@item EINVAL +The attribute object specified is invalid. + +@end table + +@subheading DESCRIPTION: + +@subheading NOTES: + +@page +@ifinfo +@node pthread_condattr_setpshared, pthread_condattr_getpshared, pthread_condattr_destroy, Condition Variable Manager Directives +@end ifinfo +@subsection pthread_condattr_setpshared + +@subheading CALLING SEQUENCE: + +@example +#include + +int pthread_condattr_setpshared( + pthread_condattr_t *attr, + int pshared +); +@end example + +@subheading STATUS CODES: + +@table @b +@item EINVAL +Invalid argument passed. + +@end table + +@subheading DESCRIPTION: + +@subheading NOTES: + +@page +@ifinfo +@node pthread_condattr_getpshared, pthread_cond_init, pthread_condattr_setpshared, Condition Variable Manager Directives +@end ifinfo +@subsection pthread_condattr_getpshared + +@subheading CALLING SEQUENCE: + +@example +#include + +int pthread_condattr_getpshared( + const pthread_condattr_t *attr, + int *pshared +); +@end example + +@subheading STATUS CODES: + +@table @b +@item EINVAL +Invalid argument passed. + +@end table + +@subheading DESCRIPTION: + +@subheading NOTES: + + +@page +@ifinfo +@node pthread_cond_init, pthread_cond_destroy, pthread_condattr_getpshared, Condition Variable Manager Directives +@end ifinfo +@subsection pthread_cond_init + +@subheading CALLING SEQUENCE: + +@example +#include + +int pthread_cond_init( + pthread_cond_t *cond, + const pthread_condattr_t *attr +); +@end example + +@subheading STATUS CODES: +@table @b +@item EAGAIN +The system lacked a resource other than memory necessary to create the +initialize the condition variable object. + +@item ENOMEM +Insufficient memory is available to initialize the condition variable object. + +@item EBUSY +The specified condition variable has already been initialized. + +@item EINVAL +The specified attribute value is invalid. + +@end table + +@subheading DESCRIPTION: + +@subheading NOTES: + +@page +@ifinfo +@node pthread_cond_destroy, pthread_cond_signal, pthread_cond_init, Condition Variable Manager Directives +@end ifinfo +@subsection pthread_cond_destroy + +@subheading CALLING SEQUENCE: + +@example +#include + +int pthread_cond_destroy( + pthread_cond_t *cond +); +@end example + +@subheading STATUS CODES: +@table @b +@item EINVAL +The specified condition variable is invalid. + +@item EBUSY +The specified condition variable is currently in use. + +@end table + +@subheading DESCRIPTION: + +@subheading NOTES: + +@page +@ifinfo +@node pthread_cond_signal, pthread_cond_broadcast, pthread_cond_destroy, Condition Variable Manager Directives +@end ifinfo +@subsection pthread_cond_signal + +@subheading CALLING SEQUENCE: + +@example +#include + +int pthread_cond_signal( + pthread_cond_t *cond +); +@end example + +@subheading STATUS CODES: +@table @b +@item EINVAL +The specified condition variable is not valid. + +@end table + +@subheading DESCRIPTION: + +@subheading NOTES: + +This routine should not be invoked from a handler from an asynchronous signal +handler or an interrupt service routine. + +@page +@ifinfo +@node pthread_cond_broadcast, pthread_cond_wait, pthread_cond_signal, Condition Variable Manager Directives +@end ifinfo +@subsection pthread_cond_broadcast + +@subheading CALLING SEQUENCE: + +@example +#include + +int pthread_cond_broadcast( + pthread_cond_t *cond +); +@end example + +@subheading STATUS CODES: +@table @b +@item EINVAL +The specified condition variable is not valid. + +@end table + +@subheading DESCRIPTION: + +@subheading NOTES: + +This routine should not be invoked from a handler from an asynchronous signal +handler or an interrupt service routine. + +@page +@ifinfo +@node pthread_cond_wait, pthread_cond_timedwait, pthread_cond_broadcast, Condition Variable Manager Directives +@end ifinfo +@subsection pthread_cond_wait + +@subheading CALLING SEQUENCE: + +@example +#include + +int pthread_cond_wait( + pthread_cond_t *cond, + pthread_mutex_t *mutex +); +@end example + +@subheading STATUS CODES: +@table @b +@item EINVAL +The specified condition variable or mutex is not initialized OR different +mutexes were specified for concurrent pthread_cond_wait() and +pthread_cond_timedwait() operations on the same condition variable OR +the mutex was not owned by the current thread at the time of the call. + +@end table + +@subheading DESCRIPTION: + +@subheading NOTES: + +@page +@ifinfo +@node pthread_cond_timedwait, Key Manager, pthread_cond_wait, Condition Variable Manager Directives +@end ifinfo +@subsection pthread_cond_timedwait + +@subheading CALLING SEQUENCE: + +@example +#include + +int pthread_cond_timedwait( + pthread_cond_t *cond, + pthread_mutex_t *mutex, + const struct timespec *abstime +); +@end example + +@subheading STATUS CODES: +@table @b +@item EINVAL +The specified condition variable or mutex is not initialized OR different +mutexes were specified for concurrent pthread_cond_wait() and +pthread_cond_timedwait() operations on the same condition variable OR +the mutex was not owned by the current thread at the time of the call. + +@item ETIMEDOUT +The specified time has elapsed without the condition variable being +satisfied. + +@end table + +@subheading DESCRIPTION: + +@subheading NOTES: + diff --git a/doc/posix_users/key.texi b/doc/posix_users/key.texi new file mode 100644 index 0000000000..90569d0e27 --- /dev/null +++ b/doc/posix_users/key.texi @@ -0,0 +1,177 @@ +@c +@c COPYRIGHT (c) 1996. +@c On-Line Applications Research Corporation (OAR). +@c All rights reserved. +@c + +@ifinfo +@node Key Manager, Key Manager Introduction, pthread_cond_timedwait, Top +@end ifinfo +@chapter Key Manager +@ifinfo +@menu +* Key Manager Introduction:: +* Key Manager Background:: +* Key Manager Operations:: +* Key Manager Directives:: +@end menu +@end ifinfo + +@ifinfo +@node Key Manager Introduction, Key Manager Background, Key Manager, Key Manager +@end ifinfo +@section Introduction + +The key manager ... + +The directives provided by the key manager are: + +@itemize @bullet +@item @code{pthread_key_create} - +@item @code{pthread_key_delete} - +@item @code{pthread_setspecific} - +@item @code{pthread_getspecific} - +@end itemize + +@ifinfo +@node Key Manager Background, Key Manager Operations, Key Manager Introduction, Key Manager +@end ifinfo +@section Background + +@ifinfo +@node Key Manager Operations, Key Manager Directives, Key Manager Background, Key Manager +@end ifinfo +@section Operations + +@ifinfo +@node Key Manager Directives, pthread_key_create, Key Manager Operations, Key Manager +@end ifinfo +@section Directives +@ifinfo +@menu +* pthread_key_create:: +* pthread_key_delete:: +* pthread_setspecific:: +* pthread_getspecific:: +@end menu +@end ifinfo + +This section details the key manager's directives. +A subsection is dedicated to each of this manager's directives +and describes the calling sequence, related constants, usage, +and status codes. + +@page +@ifinfo +@node pthread_key_create, pthread_key_delete, Key Manager Directives, Key Manager Directives +@end ifinfo +@subsection pthread_key_create + +@subheading CALLING SEQUENCE: + +@example +#include + +int pthread_key_create( + pthread_key_t *key, + void (*destructor)( void * ) +); +@end example + +@subheading STATUS CODES: + +@table @b +@item EAGAIN +There were not enough resources available to create another key. + +@item ENOMEM +Insufficient memory exists to create the key. + +@end table + +@page +@ifinfo +@node pthread_key_delete, pthread_setspecific, pthread_key_create, Key Manager Directives +@end ifinfo +@subsection pthread_key_delete + +@subheading CALLING SEQUENCE: + +@example +#include + +int pthread_key_delete( + pthread_key_t key, +); +@end example + +@subheading STATUS CODES: + +@table @b +@item EINVAL +The key was invalid + +@end table + +@subheading DESCRIPTION: + +@subheading NOTES: + +@page +@ifinfo +@node pthread_setspecific, pthread_getspecific, pthread_key_delete, Key Manager Directives +@end ifinfo +@subsection pthread_setspecific + +@subheading CALLING SEQUENCE: + +@example +#include + +int pthread_setspecific( + pthread_key_t key, + const void *value +); +@end example + +@subheading STATUS CODES: +@table @b +@item EINVAL +The specified key is invalid. + +@end table + +@subheading DESCRIPTION: + +@subheading NOTES: + +@page +@ifinfo +@node pthread_getspecific, Clock Manager, pthread_setspecific, Key Manager Directives +@end ifinfo +@subsection pthread_getspecific + +@subheading CALLING SEQUENCE: + +@example +#include + +void *pthread_getspecific( + pthread_key_t key +); +@end example + +@subheading STATUS CODES: +@table @b +@item NULL +There is no thread-specific data associated with the specified key. + +@item non-NULL +The data associated with the specified key. + +@end table + +@subheading DESCRIPTION: + +@subheading NOTES: + diff --git a/doc/posix_users/mutex.texi b/doc/posix_users/mutex.texi new file mode 100644 index 0000000000..37ea926b96 --- /dev/null +++ b/doc/posix_users/mutex.texi @@ -0,0 +1,640 @@ +@c +@c COPYRIGHT (c) 1996. +@c On-Line Applications Research Corporation (OAR). +@c All rights reserved. +@c + +@ifinfo +@node Mutex Manager, Mutex Manager Introduction, alarm, Top +@end ifinfo +@chapter Mutex Manager +@ifinfo +@menu +* Mutex Manager Introduction:: +* Mutex Manager Background:: +* Mutex Manager Operations:: +* Mutex Manager Directives:: +@end menu +@end ifinfo + +@ifinfo +@node Mutex Manager Introduction, Mutex Manager Background, Mutex Manager, Mutex Manager +@end ifinfo +@section Introduction + +The mutex manager ... + +The directives provided by the mutex manager are: + +@itemize @bullet +@item @code{pthread_mutexattr_init} - +@item @code{pthread_mutexattr_destroy} - +@item @code{pthread_mutexattr_setprotocol} - +@item @code{pthread_mutexattr_getprotocol} - +@item @code{pthread_mutexattr_setprioceiling} - +@item @code{pthread_mutexattr_getprioceiling} - +@item @code{pthread_mutexattr_setpshared} - +@item @code{pthread_mutexattr_getpshared} - +@item @code{pthread_mutex_init} - +@item @code{pthread_mutex_destroy} - +@item @code{pthread_mutex_lock} - +@item @code{pthread_mutex_trylock} - +@item @code{pthread_mutex_timedlock} - +@item @code{pthread_mutex_unlock} - +@item @code{pthread_mutex_setprioceiling} - +@item @code{pthread_mutex_getprioceiling} - +@end itemize + +@ifinfo +@node Mutex Manager Background, Mutex Manager Operations, Mutex Manager Introduction, Mutex Manager +@end ifinfo +@section Background + +@ifinfo +@node Mutex Manager Operations, Mutex Manager Directives, Mutex Manager Background, Mutex Manager +@end ifinfo +@section Operations + +@ifinfo +@node Mutex Manager Directives, pthread_mutexattr_init, Mutex Manager Operations, Mutex Manager +@end ifinfo +@section Directives +@ifinfo +@menu +* pthread_mutexattr_init:: +* pthread_mutexattr_destroy:: +* pthread_mutexattr_setprotocol:: +* pthread_mutexattr_getprotocol:: +* pthread_mutexattr_setprioceiling:: +* pthread_mutexattr_getprioceiling:: +* pthread_mutexattr_setpshared:: +* pthread_mutexattr_getpshared:: +* pthread_mutex_init:: +* pthread_mutex_destroy:: +* pthread_mutex_lock:: +* pthread_mutex_trylock:: +* pthread_mutex_timedlock:: +* pthread_mutex_unlock:: +* pthread_mutex_setprioceiling:: +* pthread_mutex_getprioceiling:: +@end menu +@end ifinfo + +This section details the mutex manager's directives. +A subsection is dedicated to each of this manager's directives +and describes the calling sequence, related constants, usage, +and status codes. + +@page +@ifinfo +@node pthread_mutexattr_init, pthread_mutexattr_destroy, Mutex Manager Directives, Mutex Manager Directives +@end ifinfo +@subsection pthread_mutexattr_init + +@subheading CALLING SEQUENCE: + +@example +#include + +int pthread_mutexattr_init( + pthread_mutexattr_t *attr +); +@end example + +@subheading STATUS CODES: + +@table @b +@item EINVAL +The attribute pointer argument is invalid. + +@end table + +@subheading DESCRIPTION: + +@subheading NOTES: + +@page +@ifinfo +@node pthread_mutexattr_destroy, pthread_mutexattr_setprotocol, pthread_mutexattr_init, Mutex Manager Directives +@end ifinfo +@subsection pthread_mutexattr_destroy + +@subheading CALLING SEQUENCE: + +@example +#include + +int pthread_mutexattr_destroy( + pthread_mutexattr_t *attr +); +@end example + +@subheading STATUS CODES: + +@table @b +@item EINVAL +The attribute pointer argument is invalid. + +@item EINVAL +The attribute set is not initialized. + +@end table + +@subheading DESCRIPTION: + +@subheading NOTES: + +@page +@ifinfo +@node pthread_mutexattr_setprotocol, pthread_mutexattr_getprotocol, pthread_mutexattr_destroy, Mutex Manager Directives +@end ifinfo +@subsection pthread_mutexattr_setprotocol + +@subheading CALLING SEQUENCE: + +@example +#include + +int pthread_mutexattr_setprotocol( + pthread_mutexattr_t *attr, + int protocol +); +@end example + +@subheading STATUS CODES: + +@table @b +@item EINVAL +The attribute pointer argument is invalid. + +@item EINVAL +The attribute set is not initialized. + +@item EINVAL +The protocol argument is invalid. + +@end table + +@subheading DESCRIPTION: + +@subheading NOTES: + +@page +@ifinfo +@node pthread_mutexattr_getprotocol, pthread_mutexattr_setprioceiling, pthread_mutexattr_setprotocol, Mutex Manager Directives +@end ifinfo +@subsection pthread_mutexattr_getprotocol + +@subheading CALLING SEQUENCE: + +@example +#include + +int pthread_mutexattr_getprotocol( + pthread_mutexattr_t *attr, + int *protocol +); +@end example + +@subheading STATUS CODES: + +@table @b +@item EINVAL +The attribute pointer argument is invalid. + +@item EINVAL +The attribute set is not initialized. + +@item EINVAL +The protocol pointer argument is invalid. + +@end table + +@subheading DESCRIPTION: + +@subheading NOTES: + +@page +@ifinfo +@node pthread_mutexattr_setprioceiling, pthread_mutexattr_getprioceiling, pthread_mutexattr_getprotocol, Mutex Manager Directives +@end ifinfo +@subsection pthread_mutexattr_setprioceiling + +@subheading CALLING SEQUENCE: + +@example +#include + +int pthread_mutexattr_setprioceiling( + pthread_mutexattr_t *attr, + int prioceiling +); +@end example + +@subheading STATUS CODES: + +@table @b +@item EINVAL +The attribute pointer argument is invalid. + +@item EINVAL +The attribute set is not initialized. + +@item EINVAL +The prioceiling argument is invalid. + +@end table + +@subheading DESCRIPTION: + +@subheading NOTES: + +@page +@ifinfo +@node pthread_mutexattr_getprioceiling, pthread_mutexattr_setpshared, pthread_mutexattr_setprioceiling, Mutex Manager Directives +@end ifinfo +@subsection pthread_mutexattr_getprioceiling + +@subheading CALLING SEQUENCE: + +@example +#include + +int pthread_mutexattr_getprioceiling( + const pthread_mutexattr_t *attr, + int *prioceiling +); +@end example + +@subheading STATUS CODES: + +@table @b +@item EINVAL +The attribute pointer argument is invalid. + +@item EINVAL +The attribute set is not initialized. + +@item EINVAL +The prioceiling pointer argument is invalid. + +@end table + +@subheading DESCRIPTION: + +@subheading NOTES: + +@page +@ifinfo +@node pthread_mutexattr_setpshared, pthread_mutexattr_getpshared, pthread_mutexattr_getprioceiling, Mutex Manager Directives +@end ifinfo +@subsection pthread_mutexattr_setpshared + +@subheading CALLING SEQUENCE: + +@example +#include + +int pthread_mutexattr_setpshared( + pthread_mutexattr_t *attr, + int pshared +); +@end example + +@subheading STATUS CODES: + +@table @b +@item EINVAL +The attribute pointer argument is invalid. + +@item EINVAL +The attribute set is not initialized. + +@item EINVAL +The pshared argument is invalid. + +@end table + +@subheading DESCRIPTION: + +@subheading NOTES: + +@page +@ifinfo +@node pthread_mutexattr_getpshared, pthread_mutex_init, pthread_mutexattr_setpshared, Mutex Manager Directives +@end ifinfo +@subsection pthread_mutexattr_getpshared + +@subheading CALLING SEQUENCE: + +@example +#include + +int pthread_mutexattr_getpshared( + const pthread_mutexattr_t *attr, + int *pshared +); +@end example + +@subheading STATUS CODES: + +@table @b +@item EINVAL +The attribute pointer argument is invalid. + +@item EINVAL +The attribute set is not initialized. + +@item EINVAL +The pshared pointer argument is invalid. + +@end table + +@subheading DESCRIPTION: + +@subheading NOTES: + +@page +@ifinfo +@node pthread_mutex_init, pthread_mutex_destroy, pthread_mutexattr_getpshared, Mutex Manager Directives +@end ifinfo +@subsection pthread_mutex_init + +@subheading CALLING SEQUENCE: + +@example +#include + +int pthread_mutex_init( + pthread_mutex_t *mutex, + const pthread_mutexattr_t *attr +); +@end example + +@subheading STATUS CODES: + +@table @b +@item EINVAL +The attribute set is not initialized. + +@item EINVAL +The specified protocol is invalid. + +@item EAGAIN +The system lacked the necessary resources to initialize another mutex. + +@item ENOMEM +Insufficient memory exists to initialize the mutex. + +@item EBUSY +Attempted to reinialize the object reference by mutex, a previously +initialized, but not yet destroyed. + +@end table + +@subheading DESCRIPTION: + +@subheading NOTES: + +@page +@ifinfo +@node pthread_mutex_destroy, pthread_mutex_lock, pthread_mutex_init, Mutex Manager Directives +@end ifinfo +@subsection pthread_mutex_destroy + +@subheading CALLING SEQUENCE: + +@example +#include + +int pthread_mutex_destroy( + pthread_mutex_t *mutex +); +@end example + +@subheading STATUS CODES: + +@table @b +@item EINVAL +The specified mutex is invalid. + +@item EBUSY +Attempted to destroy the object reference by mutex, while it is locked or +referenced by another thread. + +@end table + +@subheading DESCRIPTION: + +@subheading NOTES: + +@page +@ifinfo +@node pthread_mutex_lock, pthread_mutex_trylock, pthread_mutex_destroy, Mutex Manager Directives +@end ifinfo +@subsection pthread_mutex_lock + +@subheading CALLING SEQUENCE: + +@example +#include + +int pthread_mutex_lock( + pthread_mutex_t *mutex +); +@end example + +@subheading STATUS CODES: + +@table @b +@item EINVAL +The specified mutex is invalid. + +@item EINVAL +The mutex has the protocol attribute of PTHREAD_PRIO_PROTECT and the +priority of the calling thread is higher than the current priority +ceiling. + +@item EDEADLK +The current thread already owns the mutex. + +@end table + +@subheading DESCRIPTION: + +@subheading NOTES: + +@page +@ifinfo +@node pthread_mutex_trylock, pthread_mutex_timedlock, pthread_mutex_lock, Mutex Manager Directives +@end ifinfo +@subsection pthread_mutex_trylock + +@subheading CALLING SEQUENCE: + +@example +#include + +int pthread_mutex_trylock( + pthread_mutex_t *mutex +); +@end example + +@subheading STATUS CODES: + +@table @b +@item EINVAL +The specified mutex is invalid. + +@item EINVAL +The mutex has the protocol attribute of PTHREAD_PRIO_PROTECT and the +priority of the calling thread is higher than the current priority +ceiling. + +@item EDEADLK +The current thread already owns the mutex. + +@end table + +@subheading DESCRIPTION: + +@subheading NOTES: + +@page +@ifinfo +@node pthread_mutex_timedlock, pthread_mutex_unlock, pthread_mutex_trylock, Mutex Manager Directives +@end ifinfo +@subsection pthread_mutex_timedlock + +@subheading CALLING SEQUENCE: + +@example +#include +#include + +int pthread_mutex_timedlock( + pthread_mutex_t *mutex, + const struct timespec *timeout +); +@end example + +@subheading STATUS CODES: + +@table @b +@item EINVAL +The specified mutex is invalid. + +@item EINVAL +The nanoseconds field of timeout is invalid. + +@item EINVAL +The mutex has the protocol attribute of PTHREAD_PRIO_PROTECT and the +priority of the calling thread is higher than the current priority +ceiling. + +@item EDEADLK +The current thread already owns the mutex. + +@end table + +@subheading DESCRIPTION: + +@subheading NOTES: + + +@page +@ifinfo +@node pthread_mutex_unlock, pthread_mutex_setprioceiling, pthread_mutex_timedlock, Mutex Manager Directives +@end ifinfo +@subsection pthread_mutex_unlock + +@subheading CALLING SEQUENCE: + +@example +#include + +int pthread_mutex_unlock( + pthread_mutex_t *mutex +); +@end example + +@subheading STATUS CODES: + +@table @b +@item EINVAL +The specified mutex is invalid. + +@end table + +@subheading DESCRIPTION: + +@subheading NOTES: + +@page +@ifinfo +@node pthread_mutex_setprioceiling, pthread_mutex_getprioceiling, pthread_mutex_unlock, Mutex Manager Directives +@end ifinfo +@subsection pthread_mutex_setprioceiling + +@subheading CALLING SEQUENCE: + +@example +#include + +int pthread_mutex_setprioceiling( + pthread_mutex_t *mutex, + int prioceiling, + int *oldceiling +); +@end example + +@subheading STATUS CODES: + +@table @b +@item EINVAL +The oldceiling pointer parameter is invalid. + +@item EINVAL +The prioceiling parameter is an invalid priority. + +@item EINVAL +The specified mutex is invalid. + +@end table + +@subheading DESCRIPTION: + +@subheading NOTES: + +@page +@ifinfo +@node pthread_mutex_getprioceiling, Condition Variable Manager, pthread_mutex_setprioceiling, Mutex Manager Directives +@end ifinfo +@subsection pthread_mutex_getprioceiling + +@subheading CALLING SEQUENCE: + +@example +#include + +int pthread_mutex_getprioceiling( + pthread_mutex_t *mutex, + int *prioceiling +); +@end example + +@subheading STATUS CODES: + +@table @b +@item EINVAL +The prioceiling pointer parameter is invalid. + +@item EINVAL +The specified mutex is invalid. + +@end table + +@subheading DESCRIPTION: + +@subheading NOTES: + diff --git a/doc/posix_users/posix_test_plan.texi b/doc/posix_users/posix_test_plan.texi new file mode 100644 index 0000000000..a6dfffecd1 --- /dev/null +++ b/doc/posix_users/posix_test_plan.texi @@ -0,0 +1,123 @@ +\input ../texinfo/texinfo @c -*-texinfo-*- +@c %**start of header +@setfilename posix_test_plan +@syncodeindex vr fn +@synindex ky cp +@paragraphindent 0 +@c @smallbook +@c %**end of header + +@c +@c COPYRIGHT (c) 1988-1996. +@c On-Line Applications Research Corporation (OAR). +@c All rights reserved. +@c + +@c +@c Master file for the C User's Guide +@c + +@c Joel's Questions +@c +@c 1. Why does paragraphindent only impact makeinfo? +@c 2. Why does paragraphindent show up in HTML? +@c + +@include ../common/setup.texi + +@ignore +@ifinfo +@format +START-INFO-DIR-ENTRY +* RTEMS Posix Test Plan: (posix_test_plan). Posix Test Plan +END-INFO-DIR-ENTRY +@end format +@end ifinfo +@end ignore + +@c variable substitution info: +@c +@c @set RTEMS-LANGUAGE C +@c the language is @value{RTEMS-LANGUAGE} +@c NOTE: don't use underscore in the name +@c + +@c +@c Title Page Stuff +@c + +@set edition 4.0.0a +@set update-date 25 April 1997 +@set update-month April 1997 + +@c +@c I don't really like having a short title page. --joel +@c +@c @shorttitlepage RTEMS POSIX API Test Plan + +@setchapternewpage odd +@settitle RTEMS POSIX API Test Plan +@titlepage +@finalout + +@title RTEMS POSIX API Test Plan +@subtitle Edition @value{edition}, for RTEMS 4.0.0 +@sp 1 +@subtitle @value{update-month} +@author On-Line Applications Research Corporation +@page +@include ../common/cpright.texi +@end titlepage + +@c This prevents a black box from being printed on "overflow" lines. +@c The alternative is to rework a sentence to avoid this problem. + +@include preface.texi +@include thread.texi +@include signal.texi +@include mutex.texi +@include cond.texi +@include key.texi +@include clock.texi +@include sched.texi +@ifinfo +@node Top, Preface, (dir), (dir) +@top posix_test_plan + +This is the online version of the RTEMS POSIX API Test Plan. + +@menu +* Preface:: +* Thread Manager:: +* Signal Manager:: +* Mutex Manager:: +* Condition Variable Manager:: +* Key Manager:: +* Clock Manager:: +* Scheduler Manager:: +* Command and Variable Index:: +* Concept Index:: +@end menu + +@end ifinfo +@c +@c +@c Need to copy the emacs stuff and "trailer stuff" (index, toc) into here +@c + +@node Command and Variable Index, Concept Index, sched_yield, Top +@unnumbered Command and Variable Index + +There are currently no Command and Variable Index entries. + +@c @printindex fn + +@node Concept Index, , Command and Variable Index, Top +@unnumbered Concept Index + +There are currently no Concept Index entries. +@c @printindex cp + +@contents +@bye + diff --git a/doc/posix_users/preface.texi b/doc/posix_users/preface.texi new file mode 100644 index 0000000000..7a7fe781e7 --- /dev/null +++ b/doc/posix_users/preface.texi @@ -0,0 +1,12 @@ +@c +@c COPYRIGHT (c) 1996. +@c On-Line Applications Research Corporation (OAR). +@c All rights reserved. +@c + +@ifinfo +@node Preface, Thread Manager, Top, Top +@end ifinfo +@unnumbered Preface + +This is the test plan document for the POSIX API support for RTEMS. diff --git a/doc/posix_users/sched.texi b/doc/posix_users/sched.texi new file mode 100644 index 0000000000..f8211b51a7 --- /dev/null +++ b/doc/posix_users/sched.texi @@ -0,0 +1,226 @@ +@c +@c COPYRIGHT (c) 1996. +@c On-Line Applications Research Corporation (OAR). +@c All rights reserved. +@c + +@ifinfo +@node Scheduler Manager, Scheduler Manager Introduction, time, Top +@end ifinfo +@chapter Scheduler Manager +@ifinfo +@menu +* Scheduler Manager Introduction:: +* Scheduler Manager Background:: +* Scheduler Manager Operations:: +* Scheduler Manager Directives:: +@end menu +@end ifinfo + +@ifinfo +@node Scheduler Manager Introduction, Scheduler Manager Background, Scheduler Manager, Scheduler Manager +@end ifinfo +@section Introduction + +The scheduler manager ... + +The directives provided by the scheduler manager are: + +@itemize @bullet +@item @code{sched_get_priority_min} - +@item @code{sched_get_priority_max} - +@item @code{sched_rr_get_interval} - +@item @code{sched_yield} - +@end itemize + +@ifinfo +@node Scheduler Manager Background, Priority, Scheduler Manager Introduction, Scheduler Manager +@end ifinfo +@section Background +@ifinfo +@menu +* Priority:: +* Scheduling Policies:: +@end menu +@end ifinfo + +@ifinfo +@node Priority, Scheduling Policies, Scheduler Manager Background, Scheduler Manager Background +@end ifinfo +@subsection Priority + +In the RTEMS implementation of the POSIX API, the priorities range from +the low priority of sched_get_priority_min() to the highest priority of +sched_get_priority_max(). Numerically higher values represent higher +priorities. + +@ifinfo +@node Scheduling Policies, Scheduler Manager Operations, Priority, Scheduler Manager Background +@end ifinfo +@subsection Scheduling Policies + +The following scheduling policies are available: + +@table @b +@item SCHED_FIFO +Priority-based, preemptive scheduling with no timeslicing. This is equivalent +to what is called "manual round-robin" scheduling. + +@item SCHED_RR +Priority-based, preemptive scheduling with timeslicing. Time quantums are +maintained on a per-thread basis and are not reset at each context switch. +Thus, a thread which is preempted and subsequently resumes execution will +attempt to complete the unused portion of its time quantum. + +@item SCHED_OTHER +Priority-based, preemptive scheduling with timeslicing. Time quantums are +maintained on a per-thread basis and are reset at each context switch. + +@item SCHED_SPORADIC +Priority-based, preemptive scheduling utilizing three additional parameters: +budget, replenishment period, and low priority. Under this policy, the +thread is allowed to execute for "budget" amount of time before its priority +is lowered to "low priority". At the end of each replenishment period, +the thread resumes its initial priority and has its budget replenished. + +@end table + +@ifinfo +@node Scheduler Manager Operations, Scheduler Manager Directives, Scheduling Policies, Scheduler Manager +@end ifinfo +@section Operations + +@ifinfo +@node Scheduler Manager Directives, sched_get_priority_min, Scheduler Manager Operations, Scheduler Manager +@end ifinfo +@section Directives +@ifinfo +@menu +* sched_get_priority_min:: +* sched_get_priority_max:: +* sched_rr_get_interval:: +* sched_yield:: +@end menu +@end ifinfo + +This section details the scheduler manager's directives. +A subsection is dedicated to each of this manager's directives +and describes the calling sequence, related constants, usage, +and status codes. + +@page +@ifinfo +@node sched_get_priority_min, sched_get_priority_max, Scheduler Manager Directives, Scheduler Manager Directives +@end ifinfo +@subsection sched_get_priority_min + +@subheading CALLING SEQUENCE: + +@example +#include + +int sched_get_priority_min( + int policy +); +@end example + +@subheading STATUS CODES: + +On error, this routine returns -1 and sets errno to one of the following: + +@table @b +@item EINVAL +The indicated policy is invalid. + +@end table + +@subheading DESCRIPTION: + +@subheading NOTES: + +@page +@ifinfo +@node sched_get_priority_max, sched_rr_get_interval, sched_get_priority_min, Scheduler Manager Directives +@end ifinfo +@subsection sched_get_priority_max + +@subheading CALLING SEQUENCE: + +@example +#include + +int sched_get_priority_max( + int policy +); +@end example + +@subheading STATUS CODES: + +On error, this routine returns -1 and sets errno to one of the following: + +@table @b +@item EINVAL +The indicated policy is invalid. + +@end table + +@subheading DESCRIPTION: + +@subheading NOTES: + +@page +@ifinfo +@node sched_rr_get_interval, sched_yield, sched_get_priority_max, Scheduler Manager Directives +@end ifinfo +@subsection sched_rr_get_interval + +@subheading CALLING SEQUENCE: + +@example +#include + +int sched_rr_get_interval( + pid_t pid, + struct timespec *interval +); +@end example + +@subheading STATUS CODES: + +On error, this routine returns -1 and sets errno to one of the following: + +@table @b +@item ESRCH +The indicated process id is invalid. + +@item EINVAL +The specified interval pointer parameter is invalid. + +@end table + +@subheading DESCRIPTION: + +@subheading NOTES: + +@page +@ifinfo +@node sched_yield, Command and Variable Index, sched_rr_get_interval, Scheduler Manager Directives +@end ifinfo +@subsection sched_yield + +@subheading CALLING SEQUENCE: + +@example +#include + +int sched_yield( void ); +@end example + +@subheading STATUS CODES: + +This routine always returns zero to indicate success. + +@subheading DESCRIPTION: + +@subheading NOTES: + diff --git a/doc/posix_users/signal.texi b/doc/posix_users/signal.texi new file mode 100644 index 0000000000..3185aeff7d --- /dev/null +++ b/doc/posix_users/signal.texi @@ -0,0 +1,689 @@ +@c +@c COPYRIGHT (c) 1996. +@c On-Line Applications Research Corporation (OAR). +@c All rights reserved. +@c + +@ifinfo +@node Signal Manager, Signal Manager Introduction, pthread_getschedparam, Top +@end ifinfo +@chapter Signal Manager +@ifinfo +@menu +* Signal Manager Introduction:: +* Signal Manager Background:: +* Signal Manager Operations:: +* Signal Manager Directives:: +@end menu +@end ifinfo + +@ifinfo +@node Signal Manager Introduction, Signal Manager Background, Signal Manager, Signal Manager +@end ifinfo +@section Introduction + +The signal manager ... + +The directives provided by the signal manager are: + +@itemize @bullet +@item @code{sigaddset} - +@item @code{sigdelset} - +@item @code{sigfillset} - +@item @code{sigismember} - +@item @code{sigemptyset} - +@item @code{sigaction} - +@item @code{pthread_kill} - +@item @code{sigprocmask} - +@item @code{pthread_sigmask} - +@item @code{kill} - +@item @code{sigpending} - +@item @code{sigsuspend} - +@item @code{pause} - +@item @code{sigwait} - +@item @code{sigwaitinfo} - +@item @code{sigtimedwait} - +@item @code{sigqueue} - +@item @code{alarm} - +@end itemize + +@ifinfo +@node Signal Manager Background, Signal Delivery, Signal Manager Introduction, Signal Manager +@end ifinfo +@section Background +@ifinfo +@menu +* Signal Delivery:: +@end menu +@end ifinfo + + +@ifinfo +@node Signal Delivery, Signal Manager Operations, Signal Manager Background, Signal Manager Background +@end ifinfo +@subsection Signal Delivery + +Signals directed at a thread are delivered to the specified thread. + +Signals directed at a process are delivered to a thread which is selected +based on the following algorithm: + +@enumerate +@item If the action for this signal is currently SIG_IGN, then the signal +is simply ignored. + +@item If the currently executing thread has the signal unblocked, then +the signal is delivered to it. + +@item If any threads are currently blocked waiting for this signal +(sigwait()), then the signal is delivered to the highest priority +thread waiting for this signal. + +@item If any other threads are willing to accept delivery of the signal, then +the signal is delivered to the highest priority thread of this set. In the +event, multiple threads of the same priority are willing to accept this +signal, then priority is given first to ready threads, then to threads +blocked on calls which may be interrupted, and finally to threads blocked +on non-interruptible calls. + +@item In the event the signal still can not be delivered, then it is left +pending. The first thread to unblock the signal (sigprocmask() or +pthread_sigprocmask()) or to wait for this signal (sigwait()) will be +the recipient of the signal. + +@end enumerate + +@ifinfo +@node Signal Manager Operations, Signal Manager Directives, Signal Delivery, Signal Manager +@end ifinfo +@section Operations + +@ifinfo +@node Signal Manager Directives, sigaddset, Signal Manager Operations, Signal Manager +@end ifinfo +@section Directives +@ifinfo +@menu +* sigaddset:: +* sigdelset:: +* sigfillset:: +* sigismember:: +* sigemptyset:: +* sigaction:: +* pthread_kill:: +* sigprocmask:: +* pthread_sigmask:: +* kill:: +* sigpending:: +* sigsuspend:: +* pause:: +* sigwait:: +* sigwaitinfo:: +* sigtimedwait:: +* sigqueue:: +* alarm:: +@end menu +@end ifinfo + +This section details the signal manager's directives. +A subsection is dedicated to each of this manager's directives +and describes the calling sequence, related constants, usage, +and status codes. + +@page +@ifinfo +@node sigaddset, sigdelset, Signal Manager Directives, Signal Manager Directives +@end ifinfo +@subsection sigaddset + +@subheading CALLING SEQUENCE: + +@example +#include + +int sigaddset( + sigset_t *set, + int signo +); +@end example + +@subheading STATUS CODES: + +@table @b +@item EINVAL +Invalid argument passed. + +@end table + +@subheading DESCRIPTION: + +@subheading NOTES: + +@page +@ifinfo +@node sigdelset, sigfillset, sigaddset, Signal Manager Directives +@end ifinfo +@subsection sigdelset + +@subheading CALLING SEQUENCE: + +@example +#include + +int sigdelset( + sigset_t *set, + int signo +); +@end example + +@subheading STATUS CODES: + +@table @b +@item EINVAL +Invalid argument passed. + +@end table + +@subheading DESCRIPTION: + +@subheading NOTES: + +@page +@ifinfo +@node sigfillset, sigismember, sigdelset, Signal Manager Directives +@end ifinfo +@subsection sigfillset + +@subheading CALLING SEQUENCE: + +@example +#include + +int sigfillset( + sigset_t *set +); +@end example + +@subheading STATUS CODES: +@table @b +@item EINVAL +Invalid argument passed. + +@end table + +@subheading DESCRIPTION: + +@subheading NOTES: + +@page +@ifinfo +@node sigismember, sigemptyset, sigfillset, Signal Manager Directives +@end ifinfo +@subsection sigismember + +@subheading CALLING SEQUENCE: + +@example +#include + +int sigismember( + const sigset_t *set, + int signo +); +@end example + +@subheading STATUS CODES: +@table @b +@item EINVAL +Invalid argument passed. + +@end table + +@subheading DESCRIPTION: + +@subheading NOTES: + +@page +@ifinfo +@node sigemptyset, sigaction, sigismember, Signal Manager Directives +@end ifinfo +@subsection sigemptyset + +@subheading CALLING SEQUENCE: + +@example +#include + +int sigemptyset( + sigset_t *set +); +@end example + +@subheading STATUS CODES: + +@table @b +@item EINVAL +Invalid argument passed. + +@end table + +@subheading DESCRIPTION: + +@subheading NOTES: + +@page +@ifinfo +@node sigaction, pthread_kill, sigemptyset, Signal Manager Directives +@end ifinfo +@subsection sigaction + +@subheading CALLING SEQUENCE: + +@example +#include + +int sigaction( + int sig, + const struct sigaction *act, + struct sigaction *oact +); +@end example + +@subheading STATUS CODES: + +@table @b +@item EINVAL +Invalid argument passed. + +@item ENOTSUP +Realtime Signals Extension option not supported. + +@end table + +@subheading DESCRIPTION: + +@subheading NOTES: + +The signal number cannot be SIGKILL. +@page +@ifinfo +@node pthread_kill, sigprocmask, sigaction, Signal Manager Directives +@end ifinfo +@subsection pthread_kill + +@subheading CALLING SEQUENCE: + +@example +#include + +int pthread_kill( + pthread_t thread, + int sig +); +@end example + +@subheading STATUS CODES: +@table @b +@item ESRCH +The thread indicated by the parameter thread is invalid. + +@item EINVAL +Invalid argument passed. + +@end table + +@subheading DESCRIPTION: + +@subheading NOTES: + +@page +@ifinfo +@node sigprocmask, pthread_sigmask, pthread_kill, Signal Manager Directives +@end ifinfo +@subsection sigprocmask + +@subheading CALLING SEQUENCE: + +@example +#include + +int sigprocmask( + int how, + const sigset_t *set, + sigset_t *oset +); +@end example + +@subheading STATUS CODES: +@table @b +@item EINVAL +Invalid argument passed. + +@end table + +@subheading DESCRIPTION: + +@subheading NOTES: + + +@page +@ifinfo +@node pthread_sigmask, kill, sigprocmask, Signal Manager Directives +@end ifinfo +@subsection pthread_sigmask + +@subheading CALLING SEQUENCE: + +@example +#include + +int pthread_sigmask( + int how, + const sigset_t *set, + sigset_t *oset +); +@end example + +@subheading STATUS CODES: +@table @b +@item EINVAL +Invalid argument passed. + +@end table + +@subheading DESCRIPTION: + +@subheading NOTES: + + +@page +@ifinfo +@node kill, sigpending, pthread_sigmask, Signal Manager Directives +@end ifinfo +@subsection kill + +@subheading CALLING SEQUENCE: + +@example +#include +#include + +int kill( + pid_t pid, + int sig +); +@end example + +@subheading STATUS CODES: +@table @b +@item EINVAL +Invalid argument passed. + +@item EPERM +Process does not have permission to send the signal to any receiving process. + +@item ESRCH +The process indicated by the parameter pid is invalid. + +@end table + +@subheading DESCRIPTION: + +@subheading NOTES: + + +@page +@ifinfo +@node sigpending, sigsuspend, kill, Signal Manager Directives +@end ifinfo +@subsection sigpending + +@subheading CALLING SEQUENCE: + +@example +#include + +int sigpending( + const sigset_t *set +); +@end example + +@subheading STATUS CODES: + +On error, this routine returns -1 and sets errno to one of the following: + +@table @b +@item EFAULT +Invalid address for set. + +@end table + +@subheading DESCRIPTION: + +@subheading NOTES: + +@page +@ifinfo +@node sigsuspend, pause, sigpending, Signal Manager Directives +@end ifinfo +@subsection sigsuspend + +@subheading CALLING SEQUENCE: + +@example +#include + +int sigsuspend( + const sigset_t *sigmask +); +@end example + +@subheading STATUS CODES: +@table @b +Returns -1 and sets errno. + +@item EINTR +Signal interrupted this function. + +@end table + +@subheading DESCRIPTION: + +@subheading NOTES: + +@page +@ifinfo +@node pause, sigwait, sigsuspend, Signal Manager Directives +@end ifinfo +@subsection pause + +@subheading CALLING SEQUENCE: + +@example +#include + +int pause( void ); +@end example + +@subheading STATUS CODES: +@table @b +Returns -1 and sets errno. + +@item EINTR +Signal interrupted this function. + +@end table + +@subheading DESCRIPTION: + +@subheading NOTES: + +@page +@ifinfo +@node sigwait, sigwaitinfo, pause, Signal Manager Directives +@end ifinfo +@subsection sigwait + +@subheading CALLING SEQUENCE: + +@example +#include + +int sigwait( + const sigset_t *set, + int *sig +); +@end example + +@subheading STATUS CODES: +@table @b +@item EINVAL +Invalid argument passed. + +@item EINTR +Signal interrupted this function. + +@end table + +@subheading DESCRIPTION: + +@subheading NOTES: + +@page +@ifinfo +@node sigwaitinfo, sigtimedwait, sigwait, Signal Manager Directives +@end ifinfo +@subsection sigwaitinfo + +@subheading CALLING SEQUENCE: + +@example +#include + +int sigwaitinfo( + const sigset_t *set, + siginfo_t *info +); +@end example + +@subheading STATUS CODES: +@table @b +@item EINTR +Signal interrupted this function. + +@end table + +@subheading DESCRIPTION: + +@subheading NOTES: + +@page +@ifinfo +@node sigtimedwait, sigqueue, sigwaitinfo, Signal Manager Directives +@end ifinfo +@subsection sigtimedwait + +@subheading CALLING SEQUENCE: + +@example +#include + +int sigtimedwait( + const sigset_t *set, + siginfo_t *info, + const struct timespec *timeout +); +@end example + +@subheading STATUS CODES: +@table @b +@item EAGAIN +Timed out while waiting for the specified signal set. + +@item EINVAL +Nanoseconds field of the timeout argument is invalid. + +@item EINTR +Signal interrupted this function. + +@end table + +@subheading DESCRIPTION: + +@subheading NOTES: + +If timeout is NULL, then the thread will wait forever for the specified +signal set. + +@page +@ifinfo +@node sigqueue, alarm, sigtimedwait, Signal Manager Directives +@end ifinfo +@subsection sigqueue + +@subheading CALLING SEQUENCE: + +@example +#include + +int sigqueue( + pid_t pid, + int signo, + const union sigval value +); +@end example + +@subheading STATUS CODES: + +@table @b + +@item EAGAIN +No resources available to queue the signal. The process has already +queued SIGQUEUE_MAX signals that are still pending at the receiver +or the systemwide resource limit has been exceeded. + +@item EINVAL +The value of the signo argument is an invalid or unsupported signal +number. + +@item EPERM +The process does not have the appropriate privilege to send the signal +to the receiving process. + +@item ESRCH +The process pid does not exist. + +@end table + +@subheading DESCRIPTION: + +@subheading NOTES: + + +@page +@ifinfo +@node alarm, Mutex Manager, sigqueue, Signal Manager Directives +@end ifinfo +@subsection alarm + +@subheading CALLING SEQUENCE: + +@example +#include + +unsigned int alarm( + unsigned int seconds +); +@end example + +@subheading STATUS CODES: + +If there was a previous alarm() request with time remaining, then this routine +returns the number of seconds until that outstanding alarm would have fired. +If no previous alarm() request was outstanding, then zero is returned. + +@subheading DESCRIPTION: + +@subheading NOTES: + + diff --git a/doc/posix_users/thread.texi b/doc/posix_users/thread.texi new file mode 100644 index 0000000000..56f8bf9be5 --- /dev/null +++ b/doc/posix_users/thread.texi @@ -0,0 +1,1023 @@ +@c +@c COPYRIGHT (c) 1996. +@c On-Line Applications Research Corporation (OAR). +@c All rights reserved. +@c + +@ifinfo +@node Thread Manager, Thread Manager Introduction, Preface, Top +@end ifinfo +@chapter Thread Manager +@ifinfo +@menu +* Thread Manager Introduction:: +* Thread Manager Background:: +* Thread Manager Operations:: +* Thread Manager Directives:: +@end menu +@end ifinfo + +@ifinfo +@node Thread Manager Introduction, Thread Manager Background, Thread Manager, Thread Manager +@end ifinfo +@section Introduction + +The thread manager ... + +The directives provided by the thread manager are: + +@itemize @bullet +@item @code{pthread_attr_init} - +@item @code{pthread_attr_destroy} - +@item @code{pthread_attr_setdetachstate} - +@item @code{pthread_attr_getdetachstate} - +@item @code{pthread_attr_setstacksize} - +@item @code{pthread_attr_getstacksize} - +@item @code{pthread_attr_setstackaddr} - +@item @code{pthread_attr_getstackaddr} - +@item @code{pthread_attr_setscope} - +@item @code{pthread_attr_getscope} - +@item @code{pthread_attr_setinheritsched} - +@item @code{pthread_attr_getinheritsched} - +@item @code{pthread_attr_setschedpolicy} - +@item @code{pthread_attr_getschedpolicy} - +@item @code{pthread_attr_setschedparam} - +@item @code{pthread_attr_getschedparam} - +@item @code{pthread_create} - +@item @code{pthread_exit} - +@item @code{pthread_detach} - +@item @code{pthread_join} - +@item @code{pthread_self} - +@item @code{pthread_equal} - +@item @code{pthread_once} - +@item @code{pthread_setschedparam} - +@item @code{pthread_getschedparam} - +@end itemize + +@ifinfo +@node Thread Manager Background, Thread Attributes, Thread Manager Introduction, Thread Manager +@end ifinfo +@section Background +@ifinfo +@menu +* Thread Attributes:: +@end menu +@end ifinfo + +@ifinfo +@node Thread Attributes, Thread Manager Operations, Thread Manager Background, Thread Manager Background +@end ifinfo +@subsection Thread Attributes + +Thread attributes are utilized only at thread creation time. + +@table @b +@item 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. + +@item 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. + +@item contention scope +specifies the scheduling contention scope. RTEMS only supports the +PTHREAD_SCOPE_PROCESS scheduling contention scope. + +@item 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. + +@item 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. + +@end table + +@ifinfo +@node Thread Manager Operations, Thread Manager Directives, Thread Attributes, Thread Manager +@end ifinfo +@section Operations + +@ifinfo +@node Thread Manager Directives, pthread_attr_init, Thread Manager Operations, Thread Manager +@end ifinfo +@section Directives +@ifinfo +@menu +* pthread_attr_init:: +* pthread_attr_destroy:: +* pthread_attr_setdetachstate:: +* pthread_attr_getdetachstate:: +* pthread_attr_setstacksize:: +* pthread_attr_getstacksize:: +* pthread_attr_setstackaddr:: +* pthread_attr_getstackaddr:: +* pthread_attr_setscope:: +* pthread_attr_getscope:: +* pthread_attr_setinheritsched:: +* pthread_attr_getinheritsched:: +* pthread_attr_setschedpolicy:: +* pthread_attr_getschedpolicy:: +* pthread_attr_setschedparam:: +* pthread_attr_getschedparam:: +* pthread_create:: +* pthread_exit:: +* pthread_detach:: +* pthread_join:: +* pthread_self:: +* pthread_equal:: +* pthread_once:: +* pthread_setschedparam:: +* pthread_getschedparam:: +@end menu +@end ifinfo + +This section details the thread manager's directives. +A subsection is dedicated to each of this manager's directives +and describes the calling sequence, related constants, usage, +and status codes. + +@page +@ifinfo +@node pthread_attr_init, pthread_attr_destroy, Thread Manager Directives, Thread Manager Directives +@end ifinfo +@subsection pthread_attr_init + +@subheading CALLING SEQUENCE: + + +@example +#include + +int pthread_attr_init( + pthread_attr_t *attr +); +@end example + +@subheading STATUS CODES: + +@table @b +@item EINVAL +The attribute pointer argument is invalid. + +@end table + +@subheading DESCRIPTION: + +@subheading NOTES: + +@page +@ifinfo +@node pthread_attr_destroy, pthread_attr_setdetachstate, pthread_attr_init, Thread Manager Directives +@end ifinfo +@subsection pthread_attr_destroy + +@subheading CALLING SEQUENCE: + +@example +#include + +int pthread_attr_destroy( + pthread_attr_t *attr +); +@end example + +@subheading STATUS CODES: + +@table @b +@item EINVAL +The attribute pointer argument is invalid. + +@item EINVAL +The attribute set is not initialized. + +@end table + +@subheading DESCRIPTION: + +@subheading NOTES: + +@page +@ifinfo +@node pthread_attr_setdetachstate, pthread_attr_getdetachstate, pthread_attr_destroy, Thread Manager Directives +@end ifinfo +@subsection pthread_attr_setdetachstate + +@subheading CALLING SEQUENCE: + +@example +#include + +int pthread_attr_setdetachstate( + pthread_attr_t *attr, + int detachstate +); +@end example + +@subheading STATUS CODES: + +@table @b +@item EINVAL +The attribute pointer argument is invalid. + +@item EINVAL +The attribute set is not initialized. + +@item EINVAL +The detachstate argument is invalid. + +@end table + +@subheading DESCRIPTION: + +@subheading NOTES: + +@page +@ifinfo +@node pthread_attr_getdetachstate, pthread_attr_setstacksize, pthread_attr_setdetachstate, Thread Manager Directives +@end ifinfo +@subsection pthread_attr_getdetachstate + +@subheading CALLING SEQUENCE: + +@example +#include + +int pthread_attr_getdetachstate( + const pthread_attr_t *attr, + int *detachstate +); +@end example + +@subheading STATUS CODES: + +@table @b +@item EINVAL +The attribute pointer argument is invalid. + +@item EINVAL +The attribute set is not initialized. + +@item EINVAL +The detatchstate pointer argument is invalid. + +@end table + +@subheading DESCRIPTION: + +@subheading NOTES: + +@page +@ifinfo +@node pthread_attr_setstacksize, pthread_attr_getstacksize, pthread_attr_getdetachstate, Thread Manager Directives +@end ifinfo +@subsection pthread_attr_setstacksize + +@subheading CALLING SEQUENCE: + +@example +#include + +int pthread_attr_setstacksize( + pthread_attr_t *attr, + size_t stacksize +); +@end example + +@subheading STATUS CODES: + +@table @b +@item EINVAL +The attribute pointer argument is invalid. + +@item EINVAL +The attribute set is not initialized. + +@end table + +@subheading DESCRIPTION: + +@subheading NOTES: + +If the specified stacksize is below the minimum required for this CPU, then +the stacksize will be set to the minimum for this CPU. + +@page +@ifinfo +@node pthread_attr_getstacksize, pthread_attr_setstackaddr, pthread_attr_setstacksize, Thread Manager Directives +@end ifinfo +@subsection pthread_attr_getstacksize + +@subheading CALLING SEQUENCE: + +@example +#include + +int pthread_attr_getstacksize( + const pthread_attr_t *attr, + size_t *stacksize +); +@end example + +@subheading STATUS CODES: + +@table @b +@item EINVAL +The attribute pointer argument is invalid. + +@item EINVAL +The attribute set is not initialized. + +@item EINVAL +The stacksize pointer argument is invalid. + +@end table + +@subheading DESCRIPTION: + +@subheading NOTES: + +@page +@ifinfo +@node pthread_attr_setstackaddr, pthread_attr_getstackaddr, pthread_attr_getstacksize, Thread Manager Directives +@end ifinfo +@subsection pthread_attr_setstackaddr + +@subheading CALLING SEQUENCE: + +@example +#include + +int pthread_attr_setstackaddr( + pthread_attr_t *attr, + void *stackaddr +); +@end example + +@subheading STATUS CODES: + +@table @b +@item EINVAL +The attribute pointer argument is invalid. + +@item EINVAL +The attribute set is not initialized. + +@end table + +@subheading DESCRIPTION: + +@subheading NOTES: + +@page +@ifinfo +@node pthread_attr_getstackaddr, pthread_attr_setscope, pthread_attr_setstackaddr, Thread Manager Directives +@end ifinfo +@subsection pthread_attr_getstackaddr + +@subheading CALLING SEQUENCE: + +@example +#include + +int pthread_attr_getstackaddr( + const pthread_attr_t *attr, + void **stackaddr +); +@end example + +@subheading STATUS CODES: + +@table @b +@item EINVAL +The attribute pointer argument is invalid. + +@item EINVAL +The attribute set is not initialized. + +@item EINVAL +The stackaddr pointer argument is invalid. + +@end table + +@subheading DESCRIPTION: + +@subheading NOTES: + +@page +@ifinfo +@node pthread_attr_setscope, pthread_attr_getscope, pthread_attr_getstackaddr, Thread Manager Directives +@end ifinfo +@subsection pthread_attr_setscope + +@subheading CALLING SEQUENCE: + +@example +#include + +int pthread_attr_setscope( + pthread_attr_t *attr, + int contentionscope +); +@end example + +@subheading STATUS CODES: + +@table @b +@item EINVAL +The attribute pointer argument is invalid. + +@item EINVAL +The attribute set is not initialized. + +@item EINVAL +The contention scope specified is not valid. + +@item ENOTSUP +The contention scope specified (PTHREAD_SCOPE_SYSTEM) is not supported. + +@end table + +@subheading DESCRIPTION: + +@subheading NOTES: + +@page +@ifinfo +@node pthread_attr_getscope, pthread_attr_setinheritsched, pthread_attr_setscope, Thread Manager Directives +@end ifinfo +@subsection pthread_attr_getscope + +@subheading CALLING SEQUENCE: + +@example +#include + +int pthread_attr_getscope( + const pthread_attr_t *attr, + int *contentionscope +); +@end example + +@subheading STATUS CODES: + +@table @b +@item EINVAL +The attribute pointer argument is invalid. + +@item EINVAL +The attribute set is not initialized. + +@item EINVAL +The contentionscope pointer argument is invalid. + +@end table + +@subheading DESCRIPTION: + +@subheading NOTES: + +@page +@ifinfo +@node pthread_attr_setinheritsched, pthread_attr_getinheritsched, pthread_attr_getscope, Thread Manager Directives +@end ifinfo +@subsection pthread_attr_setinheritsched + +@subheading CALLING SEQUENCE: + +@example +#include + +int pthread_attr_setinheritsched( + pthread_attr_t *attr, + int inheritsched +); +@end example + +@subheading STATUS CODES: + +@table @b +@item EINVAL +The attribute pointer argument is invalid. + +@item EINVAL +The attribute set is not initialized. + +@item EINVAL +The specified scheduler inheritance argument is invalid. + +@end table + +@subheading DESCRIPTION: + +@subheading NOTES: + +@page +@ifinfo +@node pthread_attr_getinheritsched, pthread_attr_setschedpolicy, pthread_attr_setinheritsched, Thread Manager Directives +@end ifinfo +@subsection pthread_attr_getinheritsched + +@subheading CALLING SEQUENCE: + +@example +#include + +int pthread_attr_getinheritsched( + const pthread_attr_t *attr, + int *inheritsched +); +@end example + +@subheading STATUS CODES: +@table @b +@item EINVAL +The attribute pointer argument is invalid. + +@item EINVAL +The attribute set is not initialized. + +@item EINVAL +The inheritsched pointer argument is invalid. + +@end table + +@subheading DESCRIPTION: + +@subheading NOTES: + +@page +@ifinfo +@node pthread_attr_setschedpolicy, pthread_attr_getschedpolicy, pthread_attr_getinheritsched, Thread Manager Directives +@end ifinfo +@subsection pthread_attr_setschedpolicy + +@subheading CALLING SEQUENCE: + +@example +#include + +int pthread_attr_setschedpolicy( + pthread_attr_t *attr, + int policy +); +@end example + +@subheading STATUS CODES: +@table @b +@item EINVAL +The attribute pointer argument is invalid. + +@item EINVAL +The attribute set is not initialized. + +@item ENOTSUP +The specified scheduler policy argument is invalid. + +@end table + +@subheading DESCRIPTION: + +@subheading NOTES: + +@page +@ifinfo +@node pthread_attr_getschedpolicy, pthread_attr_setschedparam, pthread_attr_setschedpolicy, Thread Manager Directives +@end ifinfo +@subsection pthread_attr_getschedpolicy + +@subheading CALLING SEQUENCE: + +@example +#include + +int pthread_attr_getschedpolicy( + const pthread_attr_t *attr, + int *policy +); +@end example + +@subheading STATUS CODES: +@table @b +@item EINVAL +The attribute pointer argument is invalid. + +@item EINVAL +The attribute set is not initialized. + +@item EINVAL +The specified scheduler policy argument pointer is invalid. + +@end table + +@subheading DESCRIPTION: + +@subheading NOTES: + +@page +@ifinfo +@node pthread_attr_setschedparam, pthread_attr_getschedparam, pthread_attr_getschedpolicy, Thread Manager Directives +@end ifinfo +@subsection pthread_attr_setschedparam + +@subheading CALLING SEQUENCE: + +@example +#include + +int pthread_attr_setschedparam( + pthread_attr_t *attr, + const struct sched_param param +); +@end example + +@subheading STATUS CODES: +@table @b +@item EINVAL +The attribute pointer argument is invalid. + +@item EINVAL +The attribute set is not initialized. + +@item EINVAL +The specified scheduler parameter argument is invalid. + +@end table + +@subheading DESCRIPTION: + +@subheading NOTES: + +@page +@ifinfo +@node pthread_attr_getschedparam, pthread_create, pthread_attr_setschedparam, Thread Manager Directives +@end ifinfo +@subsection pthread_attr_getschedparam + +@subheading CALLING SEQUENCE: + +@example +#include + +int pthread_attr_getschedparam( + const pthread_attr_t *attr, + struct sched_param *param +); +@end example + +@subheading STATUS CODES: +@table @b +@item EINVAL +The attribute pointer argument is invalid. + +@item EINVAL +The attribute set is not initialized. + +@item EINVAL +The specified scheduler parameter argument pointer is invalid. + +@end table + +@subheading DESCRIPTION: + +@subheading NOTES: + +@page +@ifinfo +@node pthread_create, pthread_exit, pthread_attr_getschedparam, Thread Manager Directives +@end ifinfo +@subsection pthread_create + +@subheading CALLING SEQUENCE: + +@example +#include + +int pthread_create( + pthread_t *thread, + const pthread_attr_t *attr, + void (*start_routine)( void * ), + void *arg +); +@end example + +@subheading STATUS CODES: + +@table @b + +@item EINVAL +The attribute set is not initialized. + +@item 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. + +@item EINVAL +The specified scheduler inheritance policy was invalid. + +@item ENOTSUP +The specified contention scope was PTHREAD_SCOPE_PROCESS. + +@item EINVAL +The specified thread priority was invalid. + +@item EINVAL +The specified scheduling policy was invalid. + +@item EINVAL +The scheduling policy was SCHED_SPORADIC and the specified replenishment +period is less than the initial budget. + +@item EINVAL +The scheduling policy was SCHED_SPORADIC and the specified low priority +is invalid. + +@item 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. + +@item EINVAL +Invalid argument passed. + +@end table + +@subheading DESCRIPTION: + +@subheading NOTES: + +@page +@ifinfo +@node pthread_exit, pthread_detach, pthread_create, Thread Manager Directives +@end ifinfo +@subsection pthread_exit + +@subheading CALLING SEQUENCE: + +@example +#include + +void pthread_exit( + void *status +); +@end example + +@subheading STATUS CODES: +@table @b +@item NONE + +@end table + +@subheading DESCRIPTION: + +@subheading NOTES: + +@page +@ifinfo +@node pthread_detach, pthread_join, pthread_exit, Thread Manager Directives +@end ifinfo +@subsection pthread_detach + +@subheading CALLING SEQUENCE: + +@example +#include + +int pthread_detach( + pthread_t thread +); +@end example + +@subheading STATUS CODES: +@table @b +@item ESRCH +The thread specified is invalid. + +@item EINVAL +The thread specified is not a joinable thread. + +@end table + +@subheading DESCRIPTION: + +@subheading 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. + +@page +@ifinfo +@node pthread_join, pthread_self, pthread_detach, Thread Manager Directives +@end ifinfo +@subsection pthread_join + +@subheading CALLING SEQUENCE: + +@example +#include + +int pthread_join( + pthread_t thread, + void **value_ptr +); +@end example + +@subheading STATUS CODES: +@table @b +@item ESRCH +The thread specified is invalid. + +@item EINVAL +The thread specified is not a joinable thread. + +@item EDEADLK +A deadlock was detected or thread is the calling thread. + +@end table + +@subheading DESCRIPTION: + +@subheading 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. + +If value_ptr is NULL, then no value is returned. + +@page +@ifinfo +@node pthread_self, pthread_equal, pthread_join, Thread Manager Directives +@end ifinfo +@subsection pthread_self + +@subheading CALLING SEQUENCE: + +@example +#include + +pthread_t pthread_self( void ); +@end example + +@subheading STATUS CODES: + +This routine returns the id of the calling thread. + +@subheading DESCRIPTION: + +@subheading NOTES: + +@page +@ifinfo +@node pthread_equal, pthread_once, pthread_self, Thread Manager Directives +@end ifinfo +@subsection pthread_equal + +@subheading CALLING SEQUENCE: + +@example +#include + +int pthread_equal( + pthread_t t1, + pthread_t t2 +); +@end example + +@subheading STATUS CODES: + +@table @b +@item zero +The thread ids are not equal. + +@item non-zero +The thread ids are equal. + +@end table + +@subheading DESCRIPTION: + +@subheading NOTES: + +The behavior is undefined if the thread IDs are not valid. + +@page +@ifinfo +@node pthread_once, pthread_setschedparam, pthread_equal, Thread Manager Directives +@end ifinfo +@subsection pthread_once + +@subheading CALLING SEQUENCE: + +@example +#include + +pthread_once_t once_control = PTHREAD_ONCE_INIT; + +int pthread_once( + pthread_once_t *once_control, + void (*init_routine)(void) +); +@end example + +@subheading STATUS CODES: + +NONE + +@subheading DESCRIPTION: + +@subheading NOTES: + +@page +@ifinfo +@node pthread_setschedparam, pthread_getschedparam, pthread_once, Thread Manager Directives +@end ifinfo +@subsection pthread_setschedparam + +@subheading CALLING SEQUENCE: + +@example +#include + +int pthread_setschedparam( + pthread_t thread, + int policy, + struct sched_param *param +); +@end example + +@subheading STATUS CODES: + +@table @b +@item EINVAL +The scheduling parameters indicated by the parameter param is invalid. + +@item EINVAL +The value specified by policy is invalid. + +@item EINVAL +The scheduling policy was SCHED_SPORADIC and the specified replenishment +period is less than the initial budget. + +@item EINVAL +The scheduling policy was SCHED_SPORADIC and the specified low priority +is invalid. + +@item ESRCH +The thread indicated was invalid. + +@end table + +@subheading DESCRIPTION: + +@subheading NOTES: + +@page +@ifinfo +@node pthread_getschedparam, Signal Manager, pthread_setschedparam, Thread Manager Directives +@end ifinfo +@subsection pthread_getschedparam + +@subheading CALLING SEQUENCE: + +@example +#include + +int pthread_getschedparam( + pthread_t thread, + int *policy, + struct sched_param *param +); +@end example + +@subheading STATUS CODES: + +@table @b +@item EINVAL +The policy pointer argument is invalid. + +@item EINVAL +The scheduling parameters pointer argument is invalid. + +@item ESRCH +The thread indicated by the parameter thread is invalid. + +@end table + +@subheading DESCRIPTION: + +@subheading NOTES: + -- cgit v1.2.3