xref: /freebsd/sys/sys/_pthreadtypes.h (revision 95ee2897)
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