On 2017-09-06 15:25:20 -0400, Tom Lane wrote: > Andres Freund <and...@anarazel.de> writes: > > On 2017-09-06 15:12:13 -0400, Tom Lane wrote: > >> It looks to me like two of the three implementations promise no such > >> thing. > > > They're volatile vars, so why not? > > Yeah, but so are the caller's variables. That is, in > > pg_atomic_exchange_u64_impl(volatile pg_atomic_uint64 *ptr, uint64 xchg_) > { > uint64 old; > old = ptr->value; > > ISTM that the compiler is required to actually fetch ptr->value, not > rely on some previous read of it. I do not think that (the first > version of) pg_atomic_read_u64_impl is adding any guarantee that wasn't > there already. > > >> Even if they somehow do, it hardly matters given that the cmpxchg loop > >> would be self-correcting. > > > Well, in this one instance maybe, hardly in others. > > All the functions involved use nigh-identical cmpxchg loops. > > > What are you suggesting as an alternative? > > I think we can just use "old = ptr->value" to set up for the cmpxchg > loop in every generic.h function that uses such a loop.
I think we might have been talking past each other - I thought you were talking about changing the pg_atomic_read_u64_impl implementation for external users. Greetings, Andres Freund -- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers