mirror of
https://github.com/python/cpython.git
synced 2025-10-02 21:25:24 +00:00
gh-115041: Add wrappers that are atomic only in free-threaded builds (#115046)
These are intended to be used in places where atomics are required in free-threaded builds but not in the default build. We don't want to introduce the potential performance overhead of an atomic operation in the default build.
This commit is contained in:
parent
d9f4cbe5e1
commit
a95b1a56bb
4 changed files with 40 additions and 0 deletions
35
Include/internal/pycore_pyatomic_ft_wrappers.h
Normal file
35
Include/internal/pycore_pyatomic_ft_wrappers.h
Normal file
|
@ -0,0 +1,35 @@
|
|||
// This header file provides wrappers around the atomic operations found in
|
||||
// `pyatomic.h` that are only atomic in free-threaded builds.
|
||||
//
|
||||
// These are intended to be used in places where atomics are required in
|
||||
// free-threaded builds, but not in the default build, and we don't want to
|
||||
// introduce the potential performance overhead of an atomic operation in the
|
||||
// default build.
|
||||
//
|
||||
// All usages of these macros should be replaced with unconditionally atomic or
|
||||
// non-atomic versions, and this file should be removed, once the dust settles
|
||||
// on free threading.
|
||||
#ifndef Py_ATOMIC_FT_WRAPPERS_H
|
||||
#define Py_ATOMIC_FT_WRAPPERS_H
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#ifndef Py_BUILD_CORE
|
||||
#error "this header requires Py_BUILD_CORE define"
|
||||
#endif
|
||||
|
||||
#ifdef Py_GIL_DISABLED
|
||||
#define FT_ATOMIC_LOAD_SSIZE_RELAXED(value) \
|
||||
_Py_atomic_load_ssize_relaxed(&value)
|
||||
#define FT_ATOMIC_STORE_SSIZE_RELAXED(value, new_value) \
|
||||
_Py_atomic_store_ssize_relaxed(&value, new_value)
|
||||
#else
|
||||
#define FT_ATOMIC_LOAD_SSIZE_RELAXED(value) value
|
||||
#define FT_ATOMIC_STORE_SSIZE_RELAXED(value, new_value) value = new_value
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif /* !Py_ATOMIC_FT_WRAPPERS_H */
|
|
@ -1150,6 +1150,7 @@ PYTHON_HEADERS= \
|
|||
$(srcdir)/Include/internal/pycore_parser.h \
|
||||
$(srcdir)/Include/internal/pycore_pathconfig.h \
|
||||
$(srcdir)/Include/internal/pycore_pyarena.h \
|
||||
$(srcdir)/Include/internal/pycore_pyatomic_ft_wrappers.h \
|
||||
$(srcdir)/Include/internal/pycore_pybuffer.h \
|
||||
$(srcdir)/Include/internal/pycore_pyerrors.h \
|
||||
$(srcdir)/Include/internal/pycore_pyhash.h \
|
||||
|
|
|
@ -266,6 +266,7 @@
|
|||
<ClInclude Include="..\Include\internal\pycore_parking_lot.h" />
|
||||
<ClInclude Include="..\Include\internal\pycore_pathconfig.h" />
|
||||
<ClInclude Include="..\Include\internal\pycore_pyarena.h" />
|
||||
<ClInclude Include="..\Include\internal\pycore_pyatomic_ft_wrappers.h" />
|
||||
<ClInclude Include="..\Include\internal\pycore_pyerrors.h" />
|
||||
<ClInclude Include="..\Include\internal\pycore_pyhash.h" />
|
||||
<ClInclude Include="..\Include\internal\pycore_pylifecycle.h" />
|
||||
|
|
|
@ -723,6 +723,9 @@
|
|||
<ClInclude Include="..\Include\internal\pycore_pyarena.h">
|
||||
<Filter>Include\internal</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\Include\internal\pycore_pyatomic_ft_wrappers.h">
|
||||
<Filter>Include\internal</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\Include\internal\pycore_pyerrors.h">
|
||||
<Filter>Include\internal</Filter>
|
||||
</ClInclude>
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue