/* Common threading primitives definitions for both POSIX and C11.
|
Copyright (C) 2017-2021 Free Software Foundation, Inc.
|
This file is part of the GNU C Library.
|
|
The GNU C Library is free software; you can redistribute it and/or
|
modify it under the terms of the GNU Lesser General Public
|
License as published by the Free Software Foundation; either
|
version 2.1 of the License, or (at your option) any later version.
|
|
The GNU C Library 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
|
Lesser General Public License for more details.
|
|
You should have received a copy of the GNU Lesser General Public
|
License along with the GNU C Library; if not, see
|
<https://www.gnu.org/licenses/>. */
|
|
#ifndef _THREAD_SHARED_TYPES_H
|
#define _THREAD_SHARED_TYPES_H 1
|
|
/* Arch-specific definitions. Each architecture must define the following
|
macros to define the expected sizes of pthread data types:
|
|
__SIZEOF_PTHREAD_ATTR_T - size of pthread_attr_t.
|
__SIZEOF_PTHREAD_MUTEX_T - size of pthread_mutex_t.
|
__SIZEOF_PTHREAD_MUTEXATTR_T - size of pthread_mutexattr_t.
|
__SIZEOF_PTHREAD_COND_T - size of pthread_cond_t.
|
__SIZEOF_PTHREAD_CONDATTR_T - size of pthread_condattr_t.
|
__SIZEOF_PTHREAD_RWLOCK_T - size of pthread_rwlock_t.
|
__SIZEOF_PTHREAD_RWLOCKATTR_T - size of pthread_rwlockattr_t.
|
__SIZEOF_PTHREAD_BARRIER_T - size of pthread_barrier_t.
|
__SIZEOF_PTHREAD_BARRIERATTR_T - size of pthread_barrierattr_t.
|
|
The additional macro defines any constraint for the lock alignment
|
inside the thread structures:
|
|
__LOCK_ALIGNMENT - for internal lock/futex usage.
|
|
Same idea but for the once locking primitive:
|
|
__ONCE_ALIGNMENT - for pthread_once_t/once_flag definition. */
|
|
#include <bits/pthreadtypes-arch.h>
|
|
|
/* Common definition of pthread_mutex_t. */
|
|
typedef struct __pthread_internal_list
|
{
|
struct __pthread_internal_list *__prev;
|
struct __pthread_internal_list *__next;
|
} __pthread_list_t;
|
|
typedef struct __pthread_internal_slist
|
{
|
struct __pthread_internal_slist *__next;
|
} __pthread_slist_t;
|
|
/* Arch-specific mutex definitions. A generic implementation is provided
|
by sysdeps/nptl/bits/struct_mutex.h. If required, an architecture
|
can override it by defining:
|
|
1. struct __pthread_mutex_s (used on both pthread_mutex_t and mtx_t
|
definition). It should contains at least the internal members
|
defined in the generic version.
|
|
2. __LOCK_ALIGNMENT for any extra attribute for internal lock used with
|
atomic operations.
|
|
3. The macro __PTHREAD_MUTEX_INITIALIZER used for static initialization.
|
It should initialize the mutex internal flag. */
|
|
#include <bits/struct_mutex.h>
|
|
/* Arch-sepecific read-write lock definitions. A generic implementation is
|
provided by struct_rwlock.h. If required, an architecture can override it
|
by defining:
|
|
1. struct __pthread_rwlock_arch_t (used on pthread_rwlock_t definition).
|
It should contain at least the internal members defined in the
|
generic version.
|
|
2. The macro __PTHREAD_RWLOCK_INITIALIZER used for static initialization.
|
It should initialize the rwlock internal type. */
|
|
#include <bits/struct_rwlock.h>
|
|
|
/* Common definition of pthread_cond_t. */
|
|
struct __pthread_cond_s
|
{
|
__extension__ union
|
{
|
__extension__ unsigned long long int __wseq;
|
struct
|
{
|
unsigned int __low;
|
unsigned int __high;
|
} __wseq32;
|
};
|
__extension__ union
|
{
|
__extension__ unsigned long long int __g1_start;
|
struct
|
{
|
unsigned int __low;
|
unsigned int __high;
|
} __g1_start32;
|
};
|
unsigned int __g_refs[2] __LOCK_ALIGNMENT;
|
unsigned int __g_size[2];
|
unsigned int __g1_orig_size;
|
unsigned int __wrefs;
|
unsigned int __g_signals[2];
|
};
|
|
typedef unsigned int __tss_t;
|
typedef unsigned long int __thrd_t;
|
|
typedef struct
|
{
|
int __data __ONCE_ALIGNMENT;
|
} __once_flag;
|
|
#define __ONCE_FLAG_INIT { 0 }
|
|
#endif /* _THREAD_SHARED_TYPES_H */
|