[PATCH] Add support for C++20 barriers

Florian Weimer fw@deneb.enyo.de
Sun May 24 18:15:38 GMT 2020


* Jonathan Wakely:

> On Sun, 24 May 2020 at 18:55, Florian Weimer wrote:
>>
>> * Thomas Rodgers:
>>
>> > +      static __gthread_t
>> > +      _S_get_tid() noexcept
>> > +      {
>> > +#ifdef __GLIBC__
>> > +     // For the GNU C library pthread_self() is usable without linking to
>> > +     // libpthread.so but returns 0, so we cannot use it in single-threaded
>> > +     // programs, because this_thread::get_id() != thread::id{} must be true.
>> > +     // We know that pthread_t is an integral type in the GNU C library.
>> > +     if (!__gthread_active_p())
>> > +       return 1;
>> > +#endif
>> > +     return __gthread_self();
>> > +      }
>>
>> This comment seems outdated or incomplete.  pthread_self returns a
>> proper pointer since glibc 2.27, I believe.
>
> The comment is copied from the <thread> header, and dates from 2015.
>
>> I'm also not sure how the difference is observable for the libstdc++
>> implementation.  Late loading of libpthread isn't quite supported.
>
> It's nothing to do with late loading. A single threaded program that
> doesn't create any threads and doesn't link to libpthread can still
> expect std::this_thread::get_id() != std::thread::id() to be true in
> the main (and only) thread. If pthread_self() returns 0, and
> thread::id() default constructs with a value of 0, then we can't
> distinguish "the main thread" from "not a thread".

Ahh.  Yes, the POSIX interface does not have any “not a thread” value
for pthread_t, so I can see how it's difficult to implement something
on top of it htat meets the C++ requirements.


More information about the Libstdc++ mailing list