The spin_lock() primitive acquires the specified spinlock, if necessary, waiting until the spinlock becomes available. In some environments, such as pthreads, this waiting will involve ``spinning'', while in others, such as the Linux kernel, it will involve blocking.
The key point is that only one thread may hold a spinlock at any given time.