Obstruction-free synchronization: double-ended queues as an example | Synapse