A single atomic instruction is used to change up to four disjoint areas in memory
concurrently in an extended compare and swap operation, replacing traditional locks
for serialization and providing recovery for all queue manipulations. Use count-based
responsibility passing is employed so that any number of tasks can read the various
message queue chains, concurrent with queue updates being made. A summary queue
update sequence number is maintained to provide concurrent chain update detection,
so that any number of tasks can add elements to the end, or remove elements from
the middle (i.e. any where in the chain) concurrently. Concurrent footprinting
is used with chain manipulation, so that all (or none) of the chaining indicators
and a footprint are set with a single, non-interruptible instruction, making it
possible for recovery to always take the correct action. One such use of concurrent
footprinting is the concurrent footprinting of use count changes, while another
is the transfer of ownership of message queue control blocks. In a preferred embodiment
on an IBM S/390 platform, the Perform Locked Operation (PLO) instruction is used
to perform the extended compare and swap operations.