The pthread_spin_unlock() function shall release the spin lock referenced by lock which was locked via the pthread_spin_lock() or pthread_spin_trylock() functions.
If there are threads spinning on the lock when pthread_spin_unlock() is called, the lock becomes available and an unspecified spinning thread shall acquire the lock.
Upon successful completion, the pthread_spin_unlock() function shall return zero; otherwise, an error number shall be returned to indicate the error.
If an implementation detects that the value specified by the lock argument to pthread_spin_unlock() does not refer to an initialized spin lock object, it is recommended that the function should fail and report an [EINVAL] error.
If an implementation detects that the value specified by the lock argument to pthread_spin_unlock() refers to a spin lock object for which the current thread does not hold the lock, it is recommended that the function should fail and report an [EPERM] error.