1*22ce4affSfengbojiang /*- 2*22ce4affSfengbojiang * SPDX-License-Identifier: BSD-3-Clause 3*22ce4affSfengbojiang * 4a9643ea8Slogwang * Copyright (c) 1993, 1994 by Chris Provenzano, [email protected] 5a9643ea8Slogwang * Copyright (c) 1995-1998 by John Birrell <[email protected]> 6a9643ea8Slogwang * All rights reserved. 7a9643ea8Slogwang * 8a9643ea8Slogwang * Redistribution and use in source and binary forms, with or without 9a9643ea8Slogwang * modification, are permitted provided that the following conditions 10a9643ea8Slogwang * are met: 11a9643ea8Slogwang * 1. Redistributions of source code must retain the above copyright 12a9643ea8Slogwang * notice, this list of conditions and the following disclaimer. 13a9643ea8Slogwang * 2. Redistributions in binary form must reproduce the above copyright 14a9643ea8Slogwang * notice, this list of conditions and the following disclaimer in the 15a9643ea8Slogwang * documentation and/or other materials provided with the distribution. 16a9643ea8Slogwang * 3. All advertising materials mentioning features or use of this software 17a9643ea8Slogwang * must display the following acknowledgement: 18a9643ea8Slogwang * This product includes software developed by Chris Provenzano. 19a9643ea8Slogwang * 4. The name of Chris Provenzano may not be used to endorse or promote 20a9643ea8Slogwang * products derived from this software without specific prior written 21a9643ea8Slogwang * permission. 22a9643ea8Slogwang * 23a9643ea8Slogwang * THIS SOFTWARE IS PROVIDED BY CHRIS PROVENZANO ``AS IS'' AND 24a9643ea8Slogwang * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 25a9643ea8Slogwang * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 26a9643ea8Slogwang * ARE DISCLAIMED. IN NO EVENT SHALL CHRIS PROVENZANO BE LIABLE FOR ANY 27a9643ea8Slogwang * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 28a9643ea8Slogwang * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 29a9643ea8Slogwang * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 30a9643ea8Slogwang * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 31a9643ea8Slogwang * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 32a9643ea8Slogwang * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 33a9643ea8Slogwang * SUCH DAMAGE. 34a9643ea8Slogwang * 35a9643ea8Slogwang * $FreeBSD$ 36a9643ea8Slogwang */ 37a9643ea8Slogwang 38a9643ea8Slogwang #ifndef _SYS__PTHREADTYPES_H_ 39a9643ea8Slogwang #define _SYS__PTHREADTYPES_H_ 40a9643ea8Slogwang 41a9643ea8Slogwang /* 42a9643ea8Slogwang * Forward structure definitions. 43a9643ea8Slogwang * 44a9643ea8Slogwang * These are mostly opaque to the user. 45a9643ea8Slogwang */ 46a9643ea8Slogwang struct pthread; 47a9643ea8Slogwang struct pthread_attr; 48a9643ea8Slogwang struct pthread_cond; 49a9643ea8Slogwang struct pthread_cond_attr; 50a9643ea8Slogwang struct pthread_mutex; 51a9643ea8Slogwang struct pthread_mutex_attr; 52a9643ea8Slogwang struct pthread_once; 53a9643ea8Slogwang struct pthread_rwlock; 54a9643ea8Slogwang struct pthread_rwlockattr; 55a9643ea8Slogwang struct pthread_barrier; 56a9643ea8Slogwang struct pthread_barrier_attr; 57a9643ea8Slogwang struct pthread_spinlock; 58a9643ea8Slogwang 59a9643ea8Slogwang /* 60a9643ea8Slogwang * Primitive system data type definitions required by P1003.1c. 61a9643ea8Slogwang * 62a9643ea8Slogwang * Note that P1003.1c specifies that there are no defined comparison 63a9643ea8Slogwang * or assignment operators for the types pthread_attr_t, pthread_cond_t, 64a9643ea8Slogwang * pthread_condattr_t, pthread_mutex_t, pthread_mutexattr_t. 65a9643ea8Slogwang */ 66a9643ea8Slogwang #ifndef _PTHREAD_T_DECLARED 67a9643ea8Slogwang typedef struct pthread *pthread_t; 68a9643ea8Slogwang #define _PTHREAD_T_DECLARED 69a9643ea8Slogwang #endif 70a9643ea8Slogwang typedef struct pthread_attr *pthread_attr_t; 71a9643ea8Slogwang typedef struct pthread_mutex *pthread_mutex_t; 72a9643ea8Slogwang typedef struct pthread_mutex_attr *pthread_mutexattr_t; 73a9643ea8Slogwang typedef struct pthread_cond *pthread_cond_t; 74a9643ea8Slogwang typedef struct pthread_cond_attr *pthread_condattr_t; 75a9643ea8Slogwang typedef int pthread_key_t; 76a9643ea8Slogwang typedef struct pthread_once pthread_once_t; 77a9643ea8Slogwang typedef struct pthread_rwlock *pthread_rwlock_t; 78a9643ea8Slogwang typedef struct pthread_rwlockattr *pthread_rwlockattr_t; 79a9643ea8Slogwang typedef struct pthread_barrier *pthread_barrier_t; 80a9643ea8Slogwang typedef struct pthread_barrierattr *pthread_barrierattr_t; 81a9643ea8Slogwang typedef struct pthread_spinlock *pthread_spinlock_t; 82a9643ea8Slogwang 83a9643ea8Slogwang /* 84a9643ea8Slogwang * Additional type definitions: 85a9643ea8Slogwang * 86a9643ea8Slogwang * Note that P1003.1c reserves the prefixes pthread_ and PTHREAD_ for 87a9643ea8Slogwang * use in header symbols. 88a9643ea8Slogwang */ 89a9643ea8Slogwang typedef void *pthread_addr_t; 90a9643ea8Slogwang typedef void *(*pthread_startroutine_t)(void *); 91a9643ea8Slogwang 92a9643ea8Slogwang /* 93a9643ea8Slogwang * Once definitions. 94a9643ea8Slogwang */ 95a9643ea8Slogwang struct pthread_once { 96a9643ea8Slogwang int state; 97a9643ea8Slogwang pthread_mutex_t mutex; 98a9643ea8Slogwang }; 99a9643ea8Slogwang 100a9643ea8Slogwang #endif /* ! _SYS__PTHREADTYPES_H_ */ 101