While looking into synchronization primitives offered by .net, I came across SpinLock and SpinWait. From the looks of it, it appears to me that SpinWait would always be the way to go..why would one continue busy waiting without relinquishing CPU when the thread has to actually be waiting for a signal from outside the thread? The cycles spent in these idle waits could have potentially been used by the thread that would that would be singalling and unblocking the thread thats busy-waiting.
Why does SpinLock exist? What makes it different than a simple busy-wait using a while loop? Under what circumstance would one want to use SpinLock over SpinWait?