On architectures capable of halting, most operating system initiate a halt when things go idle. The halt is broken at the next interrupt.
Also, most OS kernels use spinlocks as the underlying lock primitive to implement more advanced locking. Spinlocks are busy loops, but they don't spin for very long. Only a few cycles at the most.