The type signature reveals all: ainc returns a long, and xinc is void. You really can't test the value of the long * after you call xinc because somebody else might have done an xinc after your xinc but before you test the value.
I think, among others, floren and I needed ainc for devtrace years ago. I am sure that there are even better reasons than that. ainc is correct as written, as far as I can tell. I don't think the definition of ainc really requires fairness, since life doesn't either :-) ron