mirror of https://github.com/mkerrisk/man-pages
121 lines
3.6 KiB
Groff
121 lines
3.6 KiB
Groff
.\" 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)
|