BTW, while nosing around this code I came across this statement
(procarray.c, about line 4550 in HEAD):
* ... To add XIDs to the array, we just insert
* them into slots to the right of the head pointer and then advance the head
* pointer. This wouldn't require any lock at all, except that on machines
* with weak memory ordering we need to be careful that other processors
* see the array element changes before they see the head pointer change.
* We handle this by using a spinlock to protect reads and writes of the
* head/tail pointers. (We could dispense with the spinlock if we were to
* create suitable memory access barrier primitives and use those instead.)
* The spinlock must be taken to read or write the head/tail pointers unless
* the caller holds ProcArrayLock exclusively.
Nowadays we've *got* those primitives. Can we get rid of
known_assigned_xids_lck, and if so would it make a meaningful
difference in this scenario?
regards, tom lane