Your last sentence is incorrect. Spinlocks on 1 CPU machines still need to disable preemption (assuming preemption is compiled in obviously, if not then indeed you are right). Otherwise preemption could take place in the middle of a data manipulation and you would still have the same race as you described with two cpus working concurrently. Except that with preemption it is only logical concurrence not actual physical concurrence.
Best regards,
Anton