Where Online Learning is simpler!
The C and C++ Include Header Files
cat -n /usr/include/python3.14/internal/pycore_pyatomic_ft_wrappers.h
1 // This header file provides wrappers around the atomic operations found in 2 // `pyatomic.h` that are only atomic in free-threaded builds. 3 // 4 // These are intended to be used in places where atomics are required in 5 // free-threaded builds, but not in the default build, and we don't want to 6 // introduce the potential performance overhead of an atomic operation in the 7 // default build. 8 // 9 // All usages of these macros should be replaced with unconditionally atomic or 10 // non-atomic versions, and this file should be removed, once the dust settles 11 // on free threading. 12 #ifndef Py_ATOMIC_FT_WRAPPERS_H 13 #define Py_ATOMIC_FT_WRAPPERS_H 14 #ifdef __cplusplus 15 extern "C" { 16 #endif 17 18 #ifndef Py_BUILD_CORE 19 #error "this header requires Py_BUILD_CORE define" 20 #endif 21 22 #ifdef Py_GIL_DISABLED 23 #define FT_ATOMIC_LOAD_PTR(value) _Py_atomic_load_ptr(&value) 24 #define FT_ATOMIC_STORE_PTR(value, new_value) _Py_atomic_store_ptr(&value, new_value) 25 #define FT_ATOMIC_LOAD_SSIZE(value) _Py_atomic_load_ssize(&value) 26 #define FT_ATOMIC_LOAD_SSIZE_ACQUIRE(value) \ 27 _Py_atomic_load_ssize_acquire(&value) 28 #define FT_ATOMIC_LOAD_SSIZE_RELAXED(value) \ 29 _Py_atomic_load_ssize_relaxed(&value) 30 #define FT_ATOMIC_STORE_PTR(value, new_value) \ 31 _Py_atomic_store_ptr(&value, new_value) 32 #define FT_ATOMIC_LOAD_PTR_ACQUIRE(value) \ 33 _Py_atomic_load_ptr_acquire(&value) 34 #define FT_ATOMIC_LOAD_PTR_CONSUME(value) \ 35 _Py_atomic_load_ptr_consume(&value) 36 #define FT_ATOMIC_LOAD_UINTPTR_ACQUIRE(value) \ 37 _Py_atomic_load_uintptr_acquire(&value) 38 #define FT_ATOMIC_LOAD_PTR_RELAXED(value) \ 39 _Py_atomic_load_ptr_relaxed(&value) 40 #define FT_ATOMIC_LOAD_UINT8(value) \ 41 _Py_atomic_load_uint8(&value) 42 #define FT_ATOMIC_STORE_UINT8(value, new_value) \ 43 _Py_atomic_store_uint8(&value, new_value) 44 #define FT_ATOMIC_LOAD_UINT8_RELAXED(value) \ 45 _Py_atomic_load_uint8_relaxed(&value) 46 #define FT_ATOMIC_LOAD_UINT16_RELAXED(value) \ 47 _Py_atomic_load_uint16_relaxed(&value) 48 #define FT_ATOMIC_LOAD_UINT32_RELAXED(value) \ 49 _Py_atomic_load_uint32_relaxed(&value) 50 #define FT_ATOMIC_LOAD_ULONG_RELAXED(value) \ 51 _Py_atomic_load_ulong_relaxed(&value) 52 #define FT_ATOMIC_STORE_PTR_RELAXED(value, new_value) \ 53 _Py_atomic_store_ptr_relaxed(&value, new_value) 54 #define FT_ATOMIC_STORE_PTR_RELEASE(value, new_value) \ 55 _Py_atomic_store_ptr_release(&value, new_value) 56 #define FT_ATOMIC_STORE_UINTPTR_RELEASE(value, new_value) \ 57 _Py_atomic_store_uintptr_release(&value, new_value) 58 #define FT_ATOMIC_STORE_SSIZE_RELAXED(value, new_value) \ 59 _Py_atomic_store_ssize_relaxed(&value, new_value) 60 #define FT_ATOMIC_STORE_UINT8_RELAXED(value, new_value) \ 61 _Py_atomic_store_uint8_relaxed(&value, new_value) 62 #define FT_ATOMIC_STORE_UINT16_RELAXED(value, new_value) \ 63 _Py_atomic_store_uint16_relaxed(&value, new_value) 64 #define FT_ATOMIC_STORE_UINT32_RELAXED(value, new_value) \ 65 _Py_atomic_store_uint32_relaxed(&value, new_value) 66 #define FT_ATOMIC_STORE_CHAR_RELAXED(value, new_value) \ 67 _Py_atomic_store_char_relaxed(&value, new_value) 68 #define FT_ATOMIC_LOAD_CHAR_RELAXED(value) \ 69 _Py_atomic_load_char_relaxed(&value) 70 #define FT_ATOMIC_STORE_UCHAR_RELAXED(value, new_value) \ 71 _Py_atomic_store_uchar_relaxed(&value, new_value) 72 #define FT_ATOMIC_LOAD_UCHAR_RELAXED(value) \ 73 _Py_atomic_load_uchar_relaxed(&value) 74 #define FT_ATOMIC_STORE_SHORT_RELAXED(value, new_value) \ 75 _Py_atomic_store_short_relaxed(&value, new_value) 76 #define FT_ATOMIC_LOAD_SHORT_RELAXED(value) \ 77 _Py_atomic_load_short_relaxed(&value) 78 #define FT_ATOMIC_STORE_USHORT_RELAXED(value, new_value) \ 79 _Py_atomic_store_ushort_relaxed(&value, new_value) 80 #define FT_ATOMIC_LOAD_USHORT_RELAXED(value) \ 81 _Py_atomic_load_ushort_relaxed(&value) 82 #define FT_ATOMIC_LOAD_INT(value) \ 83 _Py_atomic_load_int(&value) 84 #define FT_ATOMIC_STORE_INT(value, new_value) \ 85 _Py_atomic_store_int(&value, new_value) 86 #define FT_ATOMIC_STORE_INT_RELAXED(value, new_value) \ 87 _Py_atomic_store_int_relaxed(&value, new_value) 88 #define FT_ATOMIC_LOAD_INT_RELAXED(value) \ 89 _Py_atomic_load_int_relaxed(&value) 90 #define FT_ATOMIC_LOAD_UINT(value) \ 91 _Py_atomic_load_uint(&value) 92 #define FT_ATOMIC_STORE_UINT_RELAXED(value, new_value) \ 93 _Py_atomic_store_uint_relaxed(&value, new_value) 94 #define FT_ATOMIC_LOAD_UINT_RELAXED(value) \ 95 _Py_atomic_load_uint_relaxed(&value) 96 #define FT_ATOMIC_STORE_LONG_RELAXED(value, new_value) \ 97 _Py_atomic_store_long_relaxed(&value, new_value) 98 #define FT_ATOMIC_LOAD_LONG_RELAXED(value) \ 99 _Py_atomic_load_long_relaxed(&value) 100 #define FT_ATOMIC_STORE_ULONG_RELAXED(value, new_value) \ 101 _Py_atomic_store_ulong_relaxed(&value, new_value) 102 #define FT_ATOMIC_STORE_SSIZE_RELAXED(value, new_value) \ 103 _Py_atomic_store_ssize_relaxed(&value, new_value) 104 #define FT_ATOMIC_STORE_SSIZE_RELEASE(value, new_value) \ 105 _Py_atomic_store_ssize_release(&value, new_value) 106 #define FT_ATOMIC_STORE_FLOAT_RELAXED(value, new_value) \ 107 _Py_atomic_store_float_relaxed(&value, new_value) 108 #define FT_ATOMIC_LOAD_FLOAT_RELAXED(value) \ 109 _Py_atomic_load_float_relaxed(&value) 110 #define FT_ATOMIC_STORE_DOUBLE_RELAXED(value, new_value) \ 111 _Py_atomic_store_double_relaxed(&value, new_value) 112 #define FT_ATOMIC_LOAD_DOUBLE_RELAXED(value) \ 113 _Py_atomic_load_double_relaxed(&value) 114 #define FT_ATOMIC_STORE_LLONG_RELAXED(value, new_value) \ 115 _Py_atomic_store_llong_relaxed(&value, new_value) 116 #define FT_ATOMIC_LOAD_LLONG_RELAXED(value) \ 117 _Py_atomic_load_llong_relaxed(&value) 118 #define FT_ATOMIC_STORE_ULLONG_RELAXED(value, new_value) \ 119 _Py_atomic_store_ullong_relaxed(&value, new_value) 120 #define FT_ATOMIC_LOAD_ULLONG_RELAXED(value) \ 121 _Py_atomic_load_ullong_relaxed(&value) 122 #define FT_ATOMIC_ADD_SSIZE(value, new_value) \ 123 (void)_Py_atomic_add_ssize(&value, new_value) 124 #define FT_MUTEX_LOCK(lock) PyMutex_Lock(lock) 125 #define FT_MUTEX_UNLOCK(lock) PyMutex_Unlock(lock) 126 127 #else 128 #define FT_ATOMIC_LOAD_PTR(value) value 129 #define FT_ATOMIC_STORE_PTR(value, new_value) value = new_value 130 #define FT_ATOMIC_LOAD_SSIZE(value) value 131 #define FT_ATOMIC_LOAD_SSIZE_ACQUIRE(value) value 132 #define FT_ATOMIC_LOAD_SSIZE_RELAXED(value) value 133 #define FT_ATOMIC_LOAD_PTR_ACQUIRE(value) value 134 #define FT_ATOMIC_LOAD_PTR_CONSUME(value) value 135 #define FT_ATOMIC_LOAD_UINTPTR_ACQUIRE(value) value 136 #define FT_ATOMIC_LOAD_PTR_RELAXED(value) value 137 #define FT_ATOMIC_LOAD_UINT8(value) value 138 #define FT_ATOMIC_STORE_UINT8(value, new_value) value = new_value 139 #define FT_ATOMIC_LOAD_UINT8_RELAXED(value) value 140 #define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value 141 #define FT_ATOMIC_LOAD_UINT32_RELAXED(value) value 142 #define FT_ATOMIC_LOAD_ULONG_RELAXED(value) value 143 #define FT_ATOMIC_STORE_PTR_RELAXED(value, new_value) value = new_value 144 #define FT_ATOMIC_STORE_PTR_RELEASE(value, new_value) value = new_value 145 #define FT_ATOMIC_STORE_UINTPTR_RELEASE(value, new_value) value = new_value 146 #define FT_ATOMIC_STORE_SSIZE_RELAXED(value, new_value) value = new_value 147 #define FT_ATOMIC_STORE_SSIZE_RELEASE(value, new_value) value = new_value 148 #define FT_ATOMIC_STORE_UINT8_RELAXED(value, new_value) value = new_value 149 #define FT_ATOMIC_STORE_UINT16_RELAXED(value, new_value) value = new_value 150 #define FT_ATOMIC_STORE_UINT32_RELAXED(value, new_value) value = new_value 151 #define FT_ATOMIC_LOAD_CHAR_RELAXED(value) value 152 #define FT_ATOMIC_STORE_CHAR_RELAXED(value, new_value) value = new_value 153 #define FT_ATOMIC_LOAD_UCHAR_RELAXED(value) value 154 #define FT_ATOMIC_STORE_UCHAR_RELAXED(value, new_value) value = new_value 155 #define FT_ATOMIC_LOAD_SHORT_RELAXED(value) value 156 #define FT_ATOMIC_STORE_SHORT_RELAXED(value, new_value) value = new_value 157 #define FT_ATOMIC_LOAD_USHORT_RELAXED(value) value 158 #define FT_ATOMIC_STORE_USHORT_RELAXED(value, new_value) value = new_value 159 #define FT_ATOMIC_LOAD_INT(value) value 160 #define FT_ATOMIC_STORE_INT(value, new_value) value = new_value 161 #define FT_ATOMIC_LOAD_INT_RELAXED(value) value 162 #define FT_ATOMIC_STORE_INT_RELAXED(value, new_value) value = new_value 163 #define FT_ATOMIC_LOAD_UINT(value) value 164 #define FT_ATOMIC_LOAD_UINT_RELAXED(value) value 165 #define FT_ATOMIC_STORE_UINT_RELAXED(value, new_value) value = new_value 166 #define FT_ATOMIC_LOAD_LONG_RELAXED(value) value 167 #define FT_ATOMIC_STORE_LONG_RELAXED(value, new_value) value = new_value 168 #define FT_ATOMIC_STORE_ULONG_RELAXED(value, new_value) value = new_value 169 #define FT_ATOMIC_STORE_SSIZE_RELAXED(value, new_value) value = new_value 170 #define FT_ATOMIC_LOAD_FLOAT_RELAXED(value) value 171 #define FT_ATOMIC_STORE_FLOAT_RELAXED(value, new_value) value = new_value 172 #define FT_ATOMIC_LOAD_DOUBLE_RELAXED(value) value 173 #define FT_ATOMIC_STORE_DOUBLE_RELAXED(value, new_value) value = new_value 174 #define FT_ATOMIC_LOAD_LLONG_RELAXED(value) value 175 #define FT_ATOMIC_STORE_LLONG_RELAXED(value, new_value) value = new_value 176 #define FT_ATOMIC_LOAD_ULLONG_RELAXED(value) value 177 #define FT_ATOMIC_STORE_ULLONG_RELAXED(value, new_value) value = new_value 178 #define FT_ATOMIC_ADD_SSIZE(value, new_value) (void)(value += new_value) 179 #define FT_MUTEX_LOCK(lock) do {} while (0) 180 #define FT_MUTEX_UNLOCK(lock) do {} while (0) 181 182 #endif 183 184 #ifdef __cplusplus 185 } 186 #endif 187 #endif /* !Py_ATOMIC_FT_WRAPPERS_H */