Next, either ssp_slist and ssp_hash, or adding atomic_swap to libabstraction and writing dsf_slist and dsf_hash.
Probably first the former.
Once they’re both done, leaves ssf_queue (which will take some thought, since dff_queue, the original source, has a built-in ABA scheme) and ssf_ringbuffer, where ssf_ringbuffer is a no brainer.
And then we’re done… except for actually making it all work, writing unit tests and benchmarks, making it compile on all target platforms (six of them) and documentation.
The main question is how to go about with unit tests. I think I’ve come to the end of the road with the ad hoc method I’ve used so far of just putting together sensible tests. There’s just too much code. I’m considering a fuzzy testing engine – after all, with lock-free code, you can execute any API call at any time. Why not have every thread randomly executing every API call, for say sixty seconds at a time? problem is, you might not well uncover timing issues – with a tailored test, you have all n threads hammering away in the same little area at the same time. With a fuzzy test, you have less control; you could limit the number of elements in the data structure to try to force proximity, but it’s rather vague. OTOH, what’s nice about it is a fuzzy test engine works for ALL APIs, with almost zero effort – you just populate an array with function pointers and let it go.