.\" Copyright (c) 2017, Michael Kerrisk <mtk.manpages@gmail.com>
.\"
.\" %%%LICENSE_START(VERBATIM)
.\" Permission is granted to make and distribute verbatim copies of this
.\" manual provided the copyright notice and this permission notice are
.\" preserved on all copies.
.\"
.\" Permission is granted to copy and distribute modified versions of this
.\" manual under the conditions for verbatim copying, provided that the
.\" entire resulting derived work is distributed under the terms of a
.\" permission notice identical to this one.
.\"
.\" Since the Linux kernel and libraries are constantly changing, this
.\" manual page may be incorrect or out-of-date.  The author(s) assume no
.\" responsibility for errors or omissions, or for damages resulting from
.\" the use of the information contained herein.  The author(s) may not
.\" have taken the same level of care in the production of this manual,
.\" which is licensed free of charge, as they might when working
.\" professionally.
.\"
.\" Formatted or processed versions of this manual, if unaccompanied by
.\" the source, must acknowledge the copyright and authors of this work.
.\" %%%LICENSE_END
.\"
.TH PTHREAD_SPIN_LOCK 3 2021-03-22 "Linux" "Linux Programmer's Manual"
.SH NAME
pthread_spin_lock, pthread_spin_trylock, pthread_spin_unlock \-
lock and unlock a spin lock
.SH SYNOPSIS
.nf
.B #include <pthread.h>
.PP
.BI "int pthread_spin_lock(pthread_spinlock_t *" lock );
.BI "int pthread_spin_trylock(pthread_spinlock_t *" lock );
.BI "int pthread_spin_unlock(pthread_spinlock_t *" lock );
.fi
.PP
Compile and link with \fI\-pthread\fP.
.PP
.RS -4
Feature Test Macro Requirements for glibc (see
.BR feature_test_macros (7)):
.RE
.PP
.BR pthread_spin_lock (),
.BR pthread_spin_trylock ():
.nf
    _POSIX_C_SOURCE >= 200112L
.fi
.SH DESCRIPTION
The
.BR pthread_spin_lock ()
function locks the spin lock referred to by
.IR lock .
If the spin lock is currently unlocked,
the calling thread acquires the lock immediately.
If the spin lock is currently locked by another thread,
the calling thread spins, testing the lock until it becomes available,
at which point the calling thread acquires the lock.
.PP
Calling
.BR pthread_spin_lock ()
on a lock that is already held by the caller
or a lock that has not been initialized with
.BR pthread_spin_init (3)
results in undefined behavior.
.PP
The
.BR pthread_spin_trylock ()
function is like
.BR pthread_spin_lock (),
except that if the spin lock referred to by
.I lock
is currently locked,
then, instead of spinning, the call returns immediately with the error
.BR EBUSY .
.PP
The
.BR pthread_spin_unlock ()
function unlocks the spin lock referred to
.IR lock .
If any threads are spinning on the lock,
one of those threads will then acquire the lock.
.PP
Calling
.BR pthread_spin_unlock ()
on a lock that is not held by the caller results in undefined behavior.
.SH RETURN VALUE
On success, these functions return zero.
On failure, they return an error number.
.SH ERRORS
.BR pthread_spin_lock ()
may fail with the following errors:
.TP
.B EDEADLOCK
.\" Not detected in glibc
The system detected a deadlock condition.
.PP
.BR pthread_spin_trylock ()
fails with the following errors:
.TP
.B EBUSY
The spin lock is currently locked by another thread.
.SH VERSIONS
These functions first appeared in glibc in version 2.2.
.SH CONFORMING TO
POSIX.1-2001.
.SH NOTES
Applying any of the functions described on this page to
an uninitialized spin lock results in undefined behavior.
.PP
Carefully read NOTES in
.BR pthread_spin_init (3).
.SH SEE ALSO
.ad l
.nh
.\" FIXME . .BR pthread_mutex_lock (3),
.BR pthread_spin_destroy (3),
.BR pthread_spin_init (3),
.BR pthreads (7)
