1c4e20cadSPedro F. Giffuni /*- 2c4e20cadSPedro F. Giffuni * SPDX-License-Identifier: BSD-3-Clause 3c4e20cadSPedro F. Giffuni * 44d62f529SCraig Rodrigues * Copyright (c) 1993, 1994 by Chris Provenzano, proven@mit.edu 54d62f529SCraig Rodrigues * Copyright (c) 1995-1998 by John Birrell <jb@cimlogic.com.au> 64d62f529SCraig Rodrigues * All rights reserved. 74d62f529SCraig Rodrigues * 84d62f529SCraig Rodrigues * Redistribution and use in source and binary forms, with or without 94d62f529SCraig Rodrigues * modification, are permitted provided that the following conditions 104d62f529SCraig Rodrigues * are met: 114d62f529SCraig Rodrigues * 1. Redistributions of source code must retain the above copyright 124d62f529SCraig Rodrigues * notice, this list of conditions and the following disclaimer. 134d62f529SCraig Rodrigues * 2. Redistributions in binary form must reproduce the above copyright 144d62f529SCraig Rodrigues * notice, this list of conditions and the following disclaimer in the 154d62f529SCraig Rodrigues * documentation and/or other materials provided with the distribution. 164d62f529SCraig Rodrigues * 3. All advertising materials mentioning features or use of this software 174d62f529SCraig Rodrigues * must display the following acknowledgement: 184d62f529SCraig Rodrigues * This product includes software developed by Chris Provenzano. 194d62f529SCraig Rodrigues * 4. The name of Chris Provenzano may not be used to endorse or promote 204d62f529SCraig Rodrigues * products derived from this software without specific prior written 214d62f529SCraig Rodrigues * permission. 224d62f529SCraig Rodrigues * 234d62f529SCraig Rodrigues * THIS SOFTWARE IS PROVIDED BY CHRIS PROVENZANO ``AS IS'' AND 244d62f529SCraig Rodrigues * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 254d62f529SCraig Rodrigues * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 264d62f529SCraig Rodrigues * ARE DISCLAIMED. IN NO EVENT SHALL CHRIS PROVENZANO BE LIABLE FOR ANY 274d62f529SCraig Rodrigues * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 284d62f529SCraig Rodrigues * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 294d62f529SCraig Rodrigues * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 304d62f529SCraig Rodrigues * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 314d62f529SCraig Rodrigues * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 324d62f529SCraig Rodrigues * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 334d62f529SCraig Rodrigues * SUCH DAMAGE. 344d62f529SCraig Rodrigues */ 354d62f529SCraig Rodrigues 364d62f529SCraig Rodrigues #ifndef _SYS__PTHREADTYPES_H_ 374d62f529SCraig Rodrigues #define _SYS__PTHREADTYPES_H_ 384d62f529SCraig Rodrigues 394d62f529SCraig Rodrigues /* 404d62f529SCraig Rodrigues * Forward structure definitions. 414d62f529SCraig Rodrigues * 424d62f529SCraig Rodrigues * These are mostly opaque to the user. 434d62f529SCraig Rodrigues */ 444d62f529SCraig Rodrigues struct pthread; 454d62f529SCraig Rodrigues struct pthread_attr; 464d62f529SCraig Rodrigues struct pthread_cond; 474d62f529SCraig Rodrigues struct pthread_cond_attr; 484d62f529SCraig Rodrigues struct pthread_mutex; 494d62f529SCraig Rodrigues struct pthread_mutex_attr; 504d62f529SCraig Rodrigues struct pthread_once; 514d62f529SCraig Rodrigues struct pthread_rwlock; 524d62f529SCraig Rodrigues struct pthread_rwlockattr; 534d62f529SCraig Rodrigues struct pthread_barrier; 544d62f529SCraig Rodrigues struct pthread_barrier_attr; 554d62f529SCraig Rodrigues struct pthread_spinlock; 564d62f529SCraig Rodrigues 574d62f529SCraig Rodrigues /* 584d62f529SCraig Rodrigues * Primitive system data type definitions required by P1003.1c. 594d62f529SCraig Rodrigues * 604d62f529SCraig Rodrigues * Note that P1003.1c specifies that there are no defined comparison 614d62f529SCraig Rodrigues * or assignment operators for the types pthread_attr_t, pthread_cond_t, 624d62f529SCraig Rodrigues * pthread_condattr_t, pthread_mutex_t, pthread_mutexattr_t. 634d62f529SCraig Rodrigues */ 6448a3f7d9SDavid Schultz #ifndef _PTHREAD_T_DECLARED 654d62f529SCraig Rodrigues typedef struct pthread *pthread_t; 6648a3f7d9SDavid Schultz #define _PTHREAD_T_DECLARED 6748a3f7d9SDavid Schultz #endif 684d62f529SCraig Rodrigues typedef struct pthread_attr *pthread_attr_t; 694d62f529SCraig Rodrigues typedef struct pthread_mutex *pthread_mutex_t; 704d62f529SCraig Rodrigues typedef struct pthread_mutex_attr *pthread_mutexattr_t; 714d62f529SCraig Rodrigues typedef struct pthread_cond *pthread_cond_t; 724d62f529SCraig Rodrigues typedef struct pthread_cond_attr *pthread_condattr_t; 734d62f529SCraig Rodrigues typedef int pthread_key_t; 744d62f529SCraig Rodrigues typedef struct pthread_once pthread_once_t; 754d62f529SCraig Rodrigues typedef struct pthread_rwlock *pthread_rwlock_t; 764d62f529SCraig Rodrigues typedef struct pthread_rwlockattr *pthread_rwlockattr_t; 774d62f529SCraig Rodrigues typedef struct pthread_barrier *pthread_barrier_t; 784d62f529SCraig Rodrigues typedef struct pthread_barrierattr *pthread_barrierattr_t; 794d62f529SCraig Rodrigues typedef struct pthread_spinlock *pthread_spinlock_t; 804d62f529SCraig Rodrigues 814d62f529SCraig Rodrigues /* 824d62f529SCraig Rodrigues * Additional type definitions: 834d62f529SCraig Rodrigues * 844d62f529SCraig Rodrigues * Note that P1003.1c reserves the prefixes pthread_ and PTHREAD_ for 854d62f529SCraig Rodrigues * use in header symbols. 864d62f529SCraig Rodrigues */ 874d62f529SCraig Rodrigues typedef void *pthread_addr_t; 884d62f529SCraig Rodrigues typedef void *(*pthread_startroutine_t)(void *); 894d62f529SCraig Rodrigues 904d62f529SCraig Rodrigues /* 914d62f529SCraig Rodrigues * Once definitions. 924d62f529SCraig Rodrigues */ 934d62f529SCraig Rodrigues struct pthread_once { 944d62f529SCraig Rodrigues int state; 954d62f529SCraig Rodrigues pthread_mutex_t mutex; 964d62f529SCraig Rodrigues }; 974d62f529SCraig Rodrigues 984d62f529SCraig Rodrigues #endif /* ! _SYS__PTHREADTYPES_H_ */ 99