[PATCH v2 00/16] libstdc++: Atomic wait/notify ABI stabilization
Jonathan Wakely
jwakely@redhat.com
Fri May 30 09:08:53 GMT 2025
On Thu, 29 May 2025 at 12:12, Jonathan Wakely <jwakely@redhat.com> wrote:
>
> This series complete Tom's work to refactor the C++20 atomic wait/notify
> code, and includes several follow-up patches from me. The goal is to
> move the core implementation pieces into libstdc++.so instead of
> defining everything inline in the headers. This is a necessary step for
> stabilizing C++20 support for GCC 16.
>
> This fixes:
>
> - PR 98749 - No precondition checks in <semaphore>, <latch> and <barrier>
> - PR 99572 - std::counting_semaphore coalescing wakes
> - PR 104928 - std::counting_semaphore on Linux can sleep forever
> - PR 110854 - constructor of std::counting_semaphore is not constexpr
> - PR 118395 - Constructor of std::barrier is not constexpr
> - PR 99995 - should not include <unistd.h> in c++20 mode
>
> Not fixed:
>
> - PR 115955 - atomic<T>::wait _S_for uses a poor hash function
> This can be fixed at leisure once the definition moves into the shared
> library and isn't defined inline in headers.
>
> - PR 118402 - std::barrier doesn't use futex directly
> See the bugzilla PR for discussion.
>
> All tests pass on x86_64-linux and sparc-solaris and power-aix. I'm not
> expecting further review of this series, but I'm posting it one more
> time before pushing because I want to see the Linaro CI results.
CI passed for arm and aarch64:
https://patchwork.sourceware.org/project/gcc/patch/20250529111009.2383223-17-jwakely@redhat.com/
So I've pushed this series to trunk.
>
>
> Jonathan Wakely (14):
> libstdc++: Whitespace fixes in atomic wait/notify code
> libstdc++: Various fixes for atomic wait/notify code
> libstdc++: Fix race condition in new atomic notify code
> libstdc++: Fix time_point conversion in atomic timed waits
> libstdc++: Simplify futex wrapper functions for atomic wait/notify
> libstdc++: Remove reinterpret_cast uses in atomic wait/notify
> libstdc++: Rename __atomic_compare to __atomic_eq
> libstdc++: Rename __waiter_pool_impl to __waitable_state
> libstdc++: Move atomic wait/notify entry points into the library
> libstdc++: Optimise std::latch::arrive_and_wait
> libstdc++: Fix std::barrier for constant initialization [PR118395]
> libstdc++: Create new base class of std::barrier<C> for non-dependent
> code
> libstdc++: Rewrite std::counting_semaphore base class [PR118494]
> libstdc++: Define __wait_result_type for atomic waiting
>
> Thomas Rodgers (2):
> libstdc++: Atomic wait/notify ABI stabilization
> libstdc++: Pass __wait_args to internal API by const pointer
>
> libstdc++-v3/acinclude.m4 | 37 --
> libstdc++-v3/config.h.in | 4 -
> libstdc++-v3/config/abi/pre/gnu.ver | 11 +
> libstdc++-v3/configure | 60 +--
> libstdc++-v3/include/bits/atomic_timed_wait.h | 452 ++++------------
> libstdc++-v3/include/bits/atomic_wait.h | 495 ++++++------------
> libstdc++-v3/include/bits/semaphore_base.h | 235 +++------
> libstdc++-v3/include/bits/version.def | 2 +-
> libstdc++-v3/include/bits/version.h | 2 +-
> libstdc++-v3/include/std/barrier | 199 ++++---
> libstdc++-v3/include/std/latch | 26 +-
> libstdc++-v3/include/std/semaphore | 32 +-
> libstdc++-v3/src/c++20/Makefile.am | 2 +-
> libstdc++-v3/src/c++20/Makefile.in | 4 +-
> libstdc++-v3/src/c++20/atomic.cc | 485 +++++++++++++++++
> .../17_intro/headers/c++1998/49745.cc | 2 -
> .../29_atomics/atomic/wait_notify/100334.cc | 7 +-
> .../29_atomics/atomic_integral/wait_notify.cc | 8 +-
> .../testsuite/30_threads/barrier/cons.cc | 6 +
> .../testsuite/30_threads/barrier/lwg3898.cc | 45 ++
> .../testsuite/30_threads/semaphore/100806.cc | 2 +-
> .../testsuite/30_threads/semaphore/cons.cc | 7 +
> .../semaphore/platform_try_acquire_for.cc | 9 -
> .../30_threads/semaphore/try_acquire_posix.cc | 153 ------
> libstdc++-v3/testsuite/util/testsuite_abi.cc | 1 +
> 25 files changed, 1056 insertions(+), 1230 deletions(-)
> create mode 100644 libstdc++-v3/src/c++20/atomic.cc
> create mode 100644 libstdc++-v3/testsuite/30_threads/barrier/cons.cc
> create mode 100644 libstdc++-v3/testsuite/30_threads/barrier/lwg3898.cc
> create mode 100644 libstdc++-v3/testsuite/30_threads/semaphore/cons.cc
> delete mode 100644 libstdc++-v3/testsuite/30_threads/semaphore/platform_try_acquire_for.cc
> delete mode 100644 libstdc++-v3/testsuite/30_threads/semaphore/try_acquire_posix.cc
>
> --
> 2.49.0
>
More information about the Libstdc++
mailing list