So I noticed another problem. I said I was worried about the releasing side (TO) being blocked, but my approach isn't better. If TO is in contention with many acquirers, it would have to keep chasing the tail of the list to update its head pointer, which can be growing indefinitely. This would behave almost the same as having a spinlock on the list.