Thread Management [POSIX Section 16]

Functions Implemented

int pthread_attr_init(pthread_attr_t *attr); 
int pthread_attr_destroy(pthread_attr_t *attr); 
int pthread_attr_setdetachstate(pthread_attr_t *attr,
                                int detachstate); 
int pthread_attr_getdetachstate(const pthread_attr_t *attr,
	                        int *detachstate); 
int pthread_attr_setstackaddr(pthread_attr_t *attr,
                              void *stackaddr); 
int pthread_attr_getstackaddr(const pthread_attr_t *attr,
	                      void **stackaddr); 
int pthread_attr_setstacksize(pthread_attr_t *attr,
                              size_t stacksize); 
int pthread_attr_getstacksize(const pthread_attr_t *attr,
	                      size_t *stacksize); 
int pthread_create( pthread_t *thread,
                    const pthread_attr_t *attr,
	            void *(*start_routine)(void *),
	            void *arg);
pthread_t pthread_self( void ); 
int pthread_equal(pthread_t thread1, pthread_t thread2); 
void pthread_exit(void *retval); 
int pthread_join(pthread_t thread, void **thread_return); 
int pthread_detach(pthread_t thread); 
int pthread_once(pthread_once_t *once_control,
	         void (*init_routine)(void));

Notes

  • The presence of thread support as a whole is controlled by the the CYGPKG_POSIX_PTHREAD configuration option. Note that disabling this will also disable many other features of the POSIX package, since these are intimately bound up with the thread mechanism.

  • The default (non-scheduling) thread attributes are:

        detachstate            PTHREAD_CREATE_JOINABLE
        stackaddr              unset
        stacksize              unset
        
  • Dynamic thread stack allocation is only provided if there is an implementation of malloc() configured (i.e. a package implements the CYGINT_MEMALLOC_MALLOC_ALLOCATORS interface). If there is no malloc() available, then the thread creator must supply a stack. If only a stack address is supplied then the stack is assumed to be PTHREAD_STACK_MIN bytes long. This size is seldom useful for any but the most trivial of threads. If a different sized stack is used, both the stack address and stack size must be supplied.

  • The value of PTHREAD_THREADS_MAX is supplied by the CYGNUM_POSIX_PTHREAD_THREADS_MAX option. This defines the maximum number of threads allowed. The POSIX standard requires this value to be at least 64, and this is the default value set.

  • When the POSIX package is installed, the thread that calls main() is initialized as a POSIX thread. The priority of that thread is controlled by the CYGNUM_POSIX_MAIN_DEFAULT_PRIORITY option.

2017-02-09
Documentation license for this page: Open Publication License