[PATCH] libstdc++: Add support for C++20 barriers
Jonathan Wakely
jwakely@redhat.com
Wed Nov 4 18:52:59 GMT 2020
On 04/11/20 10:41 -0800, Thomas Rodgers wrote:
>From: Thomas Rodgers <trodgers@redhat.com>
>
>IGNORE the previous version of this patch please.
OK, but all my comments seem to apply to this one too.
>Adds <barrier>
>
>libstdc++/ChangeLog:
>
> * include/Makefile.am (std_headers): Add new header.
> * include/Makefile.in: Regenerate.
> * include/std/barrier: New file.
> * testsuite/30_thread/barrier/1.cc: New test.
> * testsuite/30_thread/barrier/2.cc: Likewise.
> * testsuite/30_thread/barrier/arrive_and_drop.cc: Likewise.
> * testsuite/30_thread/barrier/arrive_and_wait.cc: Likewise.
> * testsuite/30_thread/barrier/arrive.cc: Likewise.
> * testsuite/30_thread/barrier/completion.cc: Likewise.
> * testsuite/30_thread/barrier/max.cc: Likewise.
>---
> libstdc++-v3/include/Makefile.am | 1 +
> libstdc++-v3/include/Makefile.in | 1 +
> libstdc++-v3/include/bits/atomic_base.h | 11 +-
> libstdc++-v3/include/std/barrier | 248 ++++++++++++++++++
> libstdc++-v3/include/std/version | 1 +
> .../testsuite/30_threads/barrier/1.cc | 27 ++
> .../testsuite/30_threads/barrier/2.cc | 27 ++
> .../testsuite/30_threads/barrier/arrive.cc | 51 ++++
> .../30_threads/barrier/arrive_and_drop.cc | 49 ++++
> .../30_threads/barrier/arrive_and_wait.cc | 51 ++++
> .../30_threads/barrier/completion.cc | 54 ++++
> .../testsuite/30_threads/barrier/max.cc | 44 ++++
> 12 files changed, 562 insertions(+), 3 deletions(-)
> create mode 100644 libstdc++-v3/include/std/barrier
> create mode 100644 libstdc++-v3/testsuite/30_threads/barrier/1.cc
> create mode 100644 libstdc++-v3/testsuite/30_threads/barrier/2.cc
> create mode 100644 libstdc++-v3/testsuite/30_threads/barrier/arrive.cc
> create mode 100644 libstdc++-v3/testsuite/30_threads/barrier/arrive_and_drop.cc
> create mode 100644 libstdc++-v3/testsuite/30_threads/barrier/arrive_and_wait.cc
> create mode 100644 libstdc++-v3/testsuite/30_threads/barrier/completion.cc
> create mode 100644 libstdc++-v3/testsuite/30_threads/barrier/max.cc
>
>diff --git a/libstdc++-v3/include/Makefile.am b/libstdc++-v3/include/Makefile.am
>index 382e94322c1..9e497835ee0 100644
>--- a/libstdc++-v3/include/Makefile.am
>+++ b/libstdc++-v3/include/Makefile.am
>@@ -30,6 +30,7 @@ std_headers = \
> ${std_srcdir}/any \
> ${std_srcdir}/array \
> ${std_srcdir}/atomic \
>+ ${std_srcdir}/barrier \
> ${std_srcdir}/bit \
> ${std_srcdir}/bitset \
> ${std_srcdir}/charconv \
>diff --git a/libstdc++-v3/include/bits/atomic_base.h b/libstdc++-v3/include/bits/atomic_base.h
>index dd4db926592..1ad34719d3e 100644
>--- a/libstdc++-v3/include/bits/atomic_base.h
>+++ b/libstdc++-v3/include/bits/atomic_base.h
>@@ -603,13 +603,18 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
> }
>
> #if __cplusplus > 201703L
>+ template<typename _Func>
>+ _GLIBCXX_ALWAYS_INLINE void
>+ _M_wait(__int_type __old, const _Func& __fn) const noexcept
>+ { std::__atomic_wait(&_M_i, __old, __fn); }
>+
> _GLIBCXX_ALWAYS_INLINE void
> wait(__int_type __old,
> memory_order __m = memory_order_seq_cst) const noexcept
> {
>- std::__atomic_wait(&_M_i, __old,
>- [__m, this, __old]
>- { return this->load(__m) != __old; });
>+ _M_wait(__old,
>+ [__m, this, __old]
>+ { return this->load(__m) != __old; });
> }
This looks like it's not meant to be part of this patch.
It also looks wrong for any patch, because it adds _M_wait as a public
member.
Not sure what this piece is for :-)
More information about the Gcc-patches
mailing list