pthread.h
来自「eCos操作系统源码」· C头文件 代码 · 共 321 行
H
321 行
#ifndef CYGONCE_PTHREAD_H#define CYGONCE_PTHREAD_H//=============================================================================//// pthread.h//// POSIX pthread header////=============================================================================//####ECOSGPLCOPYRIGHTBEGIN####// -------------------------------------------// This file is part of eCos, the Embedded Configurable Operating System.// Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 Red Hat, Inc.//// eCos is free software; you can redistribute it and/or modify it under// the terms of the GNU General Public License as published by the Free// Software Foundation; either version 2 or (at your option) any later version.//// eCos is distributed in the hope that it will be useful, but WITHOUT ANY// WARRANTY; without even the implied warranty of MERCHANTABILITY or// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License// for more details.//// You should have received a copy of the GNU General Public License along// with eCos; if not, write to the Free Software Foundation, Inc.,// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.//// As a special exception, if other files instantiate templates or use macros// or inline functions from this file, or you compile this file and link it// with other works to produce a work based on this file, this file does not// by itself cause the resulting work to be covered by the GNU General Public// License. However the source code for this file must still be made available// in accordance with section (3) of the GNU General Public License.//// This exception does not invalidate any other reasons why a work based on// this file might be covered by the GNU General Public License.//// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.// at http://sources.redhat.com/ecos/ecos-license/// -------------------------------------------//####ECOSGPLCOPYRIGHTEND####//=============================================================================//#####DESCRIPTIONBEGIN####//// Author(s): nickg// Contributors: nickg// Date: 2000-03-17// Purpose: POSIX pthread header// Description: This header contains all the definitions needed to support// pthreads under eCos. The reader is referred to the POSIX// standard or equivalent documentation for details of the// functionality contained herein.// // Usage:// #include <pthread.h>// ...// ////####DESCRIPTIONEND####////=============================================================================#include <pkgconf/hal.h>#include <pkgconf/kernel.h>#include <pkgconf/posix.h>#include <cyg/infra/cyg_type.h>#include <cyg/hal/hal_arch.h> // CYGNUM_HAL_STACK_SIZE_MINIMUM#include <stddef.h> // NULL, size_t#include <limits.h>#include <sys/types.h>#include <sched.h> // SCHED_*//=============================================================================// General thread operations//-----------------------------------------------------------------------------// Thread creation and management.// Create a thread.__externC int pthread_create (pthread_t *__pthread, const pthread_attr_t *__attr, void *(*__start_routine) (void *), void *__arg);// Get current thread id.__externC pthread_t pthread_self (void);// Compare two thread identifiers.__externC int pthread_equal (pthread_t __thread1, pthread_t __thread2);// Terminate current thread.__externC void pthread_exit (void *__retval) CYGBLD_ATTRIB_NORET;// Wait for the thread to terminate. If thread_return is not NULL then// the retval from the thread's call to pthread_exit() is stored at// *thread_return.__externC int pthread_join (pthread_t __pthread, void **__thread_return);// Set the detachstate of the thread to "detached". The thread then does not// need to be joined and its resources will be freed when it exits.__externC int pthread_detach (pthread_t __pthread);//-----------------------------------------------------------------------------// Thread attribute handling.// Initialize attributes object with default attributes:// detachstate == PTHREAD_JOINABLE// scope == PTHREAD_SCOPE_SYSTEM// inheritsched == PTHREAD_EXPLICIT_SCHED// schedpolicy == SCHED_OTHER// schedparam == unset// stackaddr == unset// stacksize == 0// __externC int pthread_attr_init (pthread_attr_t *__attr);// Destroy thread attributes object__externC int pthread_attr_destroy (pthread_attr_t *__attr);// Set the detachstate attribute__externC int pthread_attr_setdetachstate (pthread_attr_t *__attr, int __detachstate);// Get the detachstate attribute__externC int pthread_attr_getdetachstate (const pthread_attr_t *__attr, int *__detachstate);// Set scheduling contention scope__externC int pthread_attr_setscope (pthread_attr_t *__attr, int __scope);// Get scheduling contention scope__externC int pthread_attr_getscope (const pthread_attr_t *__attr, int *__scope);// Set scheduling inheritance attribute__externC int pthread_attr_setinheritsched (pthread_attr_t *__attr, int __inherit);// Get scheduling inheritance attribute__externC int pthread_attr_getinheritsched (const pthread_attr_t *__attr, int *__inherit);// Set scheduling policy__externC int pthread_attr_setschedpolicy (pthread_attr_t *__attr, int __policy);// Get scheduling policy__externC int pthread_attr_getschedpolicy (const pthread_attr_t *__attr, int *__policy);// Set scheduling parameters__externC int pthread_attr_setschedparam (pthread_attr_t *__attr, const struct sched_param *__param);// Get scheduling parameters__externC int pthread_attr_getschedparam (const pthread_attr_t *__attr, struct sched_param *__param);// Set starting address of stack. Whether this is at the start or end of// the memory block allocated for the stack depends on whether the stack// grows up or down.__externC int pthread_attr_setstackaddr (pthread_attr_t *__attr, void *__stackaddr);// Get any previously set stack address.__externC int pthread_attr_getstackaddr (const pthread_attr_t *__attr, void **__stackaddr);// Set minimum creation stack size.__externC int pthread_attr_setstacksize (pthread_attr_t *__attr, size_t __stacksize);// Get current minimal stack size.__externC int pthread_attr_getstacksize (const pthread_attr_t *__attr, size_t *__stacksize);//-----------------------------------------------------------------------------// Thread scheduling controls// Set scheduling policy and parameters for the thread__externC int pthread_setschedparam (pthread_t __pthread, int __policy, const struct sched_param *__param);// Get scheduling policy and parameters for the thread__externC int pthread_getschedparam (pthread_t __pthread, int *__policy, struct sched_param *__param);//=============================================================================// Dynamic package initialization// Initializer for pthread_once_t instances#define PTHREAD_ONCE_INIT 0// Call init_routine just the once per control variable.__externC int pthread_once (pthread_once_t *__once_control, void (*__init_routine) (void));//=============================================================================//Thread specific data// Create a key to identify a location in the thread specific data area.// Each thread has its own distinct thread-specific data area but all are// addressed by the same keys. The destructor function is called whenever a// thread exits and the value associated with the key is non-NULL.__externC int pthread_key_create (pthread_key_t *__key, void (*__destructor) (void *));// Delete key.__externC int pthread_key_delete (pthread_key_t __key);// Store the pointer value in the thread-specific data slot addressed// by the key.__externC int pthread_setspecific (pthread_key_t __key, const void *__pointer);// Retrieve the pointer value in the thread-specific data slot addressed// by the key.__externC void *pthread_getspecific (pthread_key_t __key);//=============================================================================// Thread Cancellation//-----------------------------------------------------------------------------// Data structure used to manage cleanup functionsstruct pthread_cleanup_buffer{ struct pthread_cleanup_buffer *prev; // Chain cleanup buffers void (*routine) (void *); // Function to call void *arg; // Arg to pass};//-----------------------------------------------------------------------------// Thread cancelled return value.// This is a value returned as the retval in pthread_join() of a// thread that has been cancelled. By making it the address of a// location we define we can ensure that it differs from NULL and any// other valid pointer (as required by the standard).__externC int pthread_canceled_dummy_var;#define PTHREAD_CANCELED ((void *)(&pthread_canceled_dummy_var))//-----------------------------------------------------------------------------// Cancelability enable and type#define PTHREAD_CANCEL_ENABLE 1#define PTHREAD_CANCEL_DISABLE 2#define PTHREAD_CANCEL_ASYNCHRONOUS 1#define PTHREAD_CANCEL_DEFERRED 2//-----------------------------------------------------------------------------// Functions// Set cancel state of current thread to ENABLE or DISABLE.// Returns old state in *oldstate.__externC int pthread_setcancelstate (int __state, int *__oldstate);// Set cancel type of current thread to ASYNCHRONOUS or DEFERRED.// Returns old type in *oldtype.__externC int pthread_setcanceltype (int __type, int *__oldtype);// Cancel the thread.__externC int pthread_cancel (pthread_t __pthread);// Test for a pending cancellation for the current thread and terminate// the thread if there is one.__externC void pthread_testcancel (void);// Install a cleanup routine.// Note that pthread_cleanup_push() and pthread_cleanup_pop() are macros that// must be used in matching pairs and at the same brace nesting level.#define pthread_cleanup_push(__routine, __arg) \ { \ struct pthread_cleanup_buffer _buffer_; \ pthread_cleanup_push_inner (&_buffer_, (__routine), (__arg));// Remove a cleanup handler installed by the matching pthread_cleanup_push().// If execute is non-zero, the handler function is called.#define pthread_cleanup_pop(__execute) \ pthread_cleanup_pop_inner (&_buffer_, (__execute)); \ }// These two functions actually implement the cleanup push and pop functionality.__externC void pthread_cleanup_push_inner (struct pthread_cleanup_buffer *__buffer, void (*__routine) (void *), void *__arg);__externC void pthread_cleanup_pop_inner (struct pthread_cleanup_buffer *__buffer, int __execute);// -------------------------------------------------------------------------// eCos-specific function to measure stack usage of the supplied thread#ifdef CYGFUN_KERNEL_THREADS_STACK_MEASUREMENT__externC size_t pthread_measure_stack_usage (pthread_t __pthread);#endif//-----------------------------------------------------------------------------#endif // ifndef CYGONCE_PTHREAD_H// End of pthread.h
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?