glibc (2.38)

(root)/
include/
bits/
thread-shared-types.h
       1  /* Common threading primitives definitions for both POSIX and C11.
       2     Copyright (C) 2017-2023 Free Software Foundation, Inc.
       3     This file is part of the GNU C Library.
       4  
       5     The GNU C Library is free software; you can redistribute it and/or
       6     modify it under the terms of the GNU Lesser General Public
       7     License as published by the Free Software Foundation; either
       8     version 2.1 of the License, or (at your option) any later version.
       9  
      10     The GNU C Library is distributed in the hope that it will be useful,
      11     but WITHOUT ANY WARRANTY; without even the implied warranty of
      12     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
      13     Lesser General Public License for more details.
      14  
      15     You should have received a copy of the GNU Lesser General Public
      16     License along with the GNU C Library; if not, see
      17     <https://www.gnu.org/licenses/>.  */
      18  
      19  #ifndef _THREAD_SHARED_TYPES_H
      20  #define _THREAD_SHARED_TYPES_H 1
      21  
      22  /* Arch-specific definitions.  Each architecture must define the following
      23     macros to define the expected sizes of pthread data types:
      24  
      25     __SIZEOF_PTHREAD_ATTR_T        - size of pthread_attr_t.
      26     __SIZEOF_PTHREAD_MUTEX_T       - size of pthread_mutex_t.
      27     __SIZEOF_PTHREAD_MUTEXATTR_T   - size of pthread_mutexattr_t.
      28     __SIZEOF_PTHREAD_COND_T        - size of pthread_cond_t.
      29     __SIZEOF_PTHREAD_CONDATTR_T    - size of pthread_condattr_t.
      30     __SIZEOF_PTHREAD_RWLOCK_T      - size of pthread_rwlock_t.
      31     __SIZEOF_PTHREAD_RWLOCKATTR_T  - size of pthread_rwlockattr_t.
      32     __SIZEOF_PTHREAD_BARRIER_T     - size of pthread_barrier_t.
      33     __SIZEOF_PTHREAD_BARRIERATTR_T - size of pthread_barrierattr_t.
      34  
      35     The additional macro defines any constraint for the lock alignment
      36     inside the thread structures:
      37  
      38     __LOCK_ALIGNMENT - for internal lock/futex usage.
      39  
      40     Same idea but for the once locking primitive:
      41  
      42     __ONCE_ALIGNMENT - for pthread_once_t/once_flag definition.  */
      43  
      44  #include <bits/pthreadtypes-arch.h>
      45  
      46  #include <bits/atomic_wide_counter.h>
      47  
      48  
      49  /* Common definition of pthread_mutex_t. */
      50  
      51  typedef struct __pthread_internal_list
      52  {
      53    struct __pthread_internal_list *__prev;
      54    struct __pthread_internal_list *__next;
      55  } __pthread_list_t;
      56  
      57  typedef struct __pthread_internal_slist
      58  {
      59    struct __pthread_internal_slist *__next;
      60  } __pthread_slist_t;
      61  
      62  /* Arch-specific mutex definitions.  A generic implementation is provided
      63     by sysdeps/nptl/bits/struct_mutex.h.  If required, an architecture
      64     can override it by defining:
      65  
      66     1. struct __pthread_mutex_s (used on both pthread_mutex_t and mtx_t
      67        definition).  It should contains at least the internal members
      68        defined in the generic version.
      69  
      70     2. __LOCK_ALIGNMENT for any extra attribute for internal lock used with
      71        atomic operations.
      72  
      73     3. The macro __PTHREAD_MUTEX_INITIALIZER used for static initialization.
      74        It should initialize the mutex internal flag.  */
      75  
      76  #include <bits/struct_mutex.h>
      77  
      78  /* Arch-sepecific read-write lock definitions.  A generic implementation is
      79     provided by struct_rwlock.h.  If required, an architecture can override it
      80     by defining:
      81  
      82     1. struct __pthread_rwlock_arch_t (used on pthread_rwlock_t definition).
      83        It should contain at least the internal members defined in the
      84        generic version.
      85  
      86     2. The macro __PTHREAD_RWLOCK_INITIALIZER used for static initialization.
      87        It should initialize the rwlock internal type.  */
      88  
      89  #include <bits/struct_rwlock.h>
      90  
      91  
      92  /* Common definition of pthread_cond_t. */
      93  
      94  struct __pthread_cond_s
      95  {
      96    __atomic_wide_counter __wseq;
      97    __atomic_wide_counter __g1_start;
      98    unsigned int __g_refs[2] __LOCK_ALIGNMENT;
      99    unsigned int __g_size[2];
     100    unsigned int __g1_orig_size;
     101    unsigned int __wrefs;
     102    unsigned int __g_signals[2];
     103  };
     104  
     105  typedef unsigned int __tss_t;
     106  typedef unsigned long int __thrd_t;
     107  
     108  typedef struct
     109  {
     110    int __data __ONCE_ALIGNMENT;
     111  } __once_flag;
     112  
     113  #define __ONCE_FLAG_INIT { 0 }
     114  
     115  #endif /* _THREAD_SHARED_TYPES_H  */