Why not use an atomic swap to swap in 0?

That's faster than this code at least on x86 (seqcst store is implemented as a swap anyway), and it might allow to eliminate the yield loop an abort_selection, at least if spurious wakeups are tolerable.