Hi, On 2024-02-23 14:58:12 -0600, Nathan Bossart wrote: > +/* > + * pg_atomic_write_membarrier_u32 - write with barrier semantics. > + * > + * The write is guaranteed to succeed as a whole, i.e., it's not possible to > + * observe a partial write for any reader. Note that this correctly > interacts > + * with both pg_atomic_compare_exchange_u32() and > + * pg_atomic_read_membarrier_u32(). While this may be less performant than > + * pg_atomic_write_u32() and pg_atomic_unlocked_write_u32(), it may be easier > + * to reason about correctness with this function in less > performance-sensitive > + * code. > + * > + * Full barrier semantics. > + */
The callout to pg_atomic_unlocked_write_u32() is wrong. The reason to use pg_atomic_unlocked_write_u32() is for variables where we do not ever want to fall back to spinlocks/semaphores, because the underlying variable isn't actually shared. In those cases using the other variants is a bug. The only use of pg_atomic_unlocked_write_u32() is temp-table buffers which share the data structure with the shared buffers case. Greetings, Andres Freund