Thanks Rasmus and Jonathan for your comments and suggestions.

> On 20 May 2020, at 12:07, Jonathan Wakely <jwakely....@gmail.com> wrote:
> 
> On Wed, 20 May 2020 at 09:44, Rasmus Villemoes <r...@rasmusvillemoes.dk> 
> wrote:
>> 
>> Hi
>> 
>> The condition variable implementation added in commit 806dd0472f56fd
>> seems to fall into the trap(s) pointed out in the paper
>> 
>>  http://birrell.org/andrew/papers/ImplementingCVs.pdf
>> 
>> in particular, the "if no thread is currently waiting, signal should not
>> leave a full semaphore so a following _wait will just fall through".
>> 
>> Now, libgcc/gthr.h doesn't really spell out whether __gthread condition
>> variables are supposed to behave as POSIX condition variables, so I
>> don't know if it's a problem in practice.
> 
> The libstdc++ std::condition_variable assumes POSIX-ish semantics for
> __gthread_cond_t. It certainly assumes that a signal/broadcast will
> only wake threads that are currently waiting, not affect waits that
> haven't started yet. So it seems gthr-vxworks.h should not set
> __GTHREADS_CXX0X, or libstdc++ needs a different condition_variable
> implementation for VxWorks.
> 
> Libstdc++ also assumes this requirement of pthread_cond_destroy is met:
> "It shall be safe to destroy an initialized condition variable upon
> which no threads are currently blocked."
> This means it's OK for another thread to destroy the CV after the
> semTake (*cond, WAIT_FOREVER) statement in __ghtread_cond_wait, even
> if the semTake (*mutex, WAIT_FOREVER) statement hasn't happened. The
> code looks OK as far as that requirement goes.

> I'm not sure how many other implicit assumptions libstdc++ makes about
> POSIX-ish semantics.

Ok. The goal was to provide an implementation suitable for libstdc++
so we'll look into this further.

Thanks again for the pointers and insights on expectations!

> As an aside, it looks like there are enough libgcc/config/*vx* files
> to justify creating a libgcc/config/vxworks sub-directory.

Indeed. I'll add this to the list :)

Olivier

Reply via email to