* Draft pthread_spin_lock(3) manual page
@ 2017-10-18 8:13 Michael Kerrisk (man-pages)
2017-10-18 15:07 ` Carlos O'Donell
0 siblings, 1 reply; 8+ messages in thread
From: Michael Kerrisk (man-pages) @ 2017-10-18 8:13 UTC (permalink / raw)
To: linux-man, libc-alpha
Cc: Thomas Gleixner, Peter Zijlstra, Ingo Molnar, Michael Kerrisk
Hello all,
Following on from the pthread_spin_init(3) page, I also recently
drafted a manual page for the pthread_spin_lock() and
pthread_spin_unlock() APIs. Again, comments and suggestions for
improvements would be most welcome.
Thanks,
Michael
PTHREAD_SPIN_LOCK(3) Linux Programmer's Manual PTHREAD_SPIN_LOCK(3)
NAME
pthread_spin_lock, pthread_spin_trylock, pthread_spin_unlock -
lock and unlock a spin lock
SYNOPSIS
#include <pthread.h>
int pthread_spin_lock(pthread_spinlock_t *lock);
int pthread_spin_trylock(pthread_spinlock_t *lock);
int pthread_spin_unlock(pthread_spinlock_t *lock);
Compile and link with -pthread.
Feature Test Macro Requirements for glibc (see fea‐
ture_test_macros(7)):
pthread_spin_lock(), pthread_spin_trylock():
_POSIX_C_SOURCE >= 200112L
DESCRIPTION
The pthread_spin_lock() function locks the spin lock referred to
by lock. If the spin lock is currently unlocked, the calling
thread acquires the lock immediately. If the spin lock is cur‐
rently locked by another thread, the calling thread spins, testing
the lock until it becomes available, at which point the calling
thread acquires the lock.
Calling pthread_spin_lock() on a lock that is already held by the
caller results in undefined behavior.
The pthread_spin_trylock() function is like pthread_spin_lock(),
except that if the spin lock referred to by lock is currently
locked, then, instead of spinning, the call returns immediately
with the error EBUSY.
The pthread_spin_unlock() function unlocks the spin lock referred
to lock. If any threads are spinning on the lock, one of those
threads will then acquire the lock.
Calling pthread_spin_unlock() on a lock that is not held by the
caller results in undefined behavior.
RETURN VALUE
On success, there functions return zero. On failure, they return
an error number.
ERRORS
pthread_spin_lock() may fail with the following errors:
EDEADLOCK
The system detected a deadlock condition.
pthread_spin_trylock() can fail with the following errors:
EBUSY The spin lock is currently locked by another thread.
VERSIONS
These functions first appeared in glibc in version 2.2.
CONFORMING TO
POSIX.1-2001.
NOTES
Applying any of the functions described on this page to an unini‐
tialized spin lock results in undefined behavior.
Carefully read NOTES in pthread_spin_init(3).
SEE ALSO
pthread_spin_destroy(3), pthread_spin_init(3), pthreads(7)
Linux 2017-09-30 PTHREAD_SPIN_LOCK(3)
--
Michael Kerrisk
Linux man-pages maintainer; http://www.kernel.org/doc/man-pages/
Linux/UNIX System Programming Training: http://man7.org/training/
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: Draft pthread_spin_lock(3) manual page
2017-10-18 8:13 Draft pthread_spin_lock(3) manual page Michael Kerrisk (man-pages)
@ 2017-10-18 15:07 ` Carlos O'Donell
2017-10-19 17:46 ` Michael Kerrisk (man-pages)
0 siblings, 1 reply; 8+ messages in thread
From: Carlos O'Donell @ 2017-10-18 15:07 UTC (permalink / raw)
To: mtk.manpages, linux-man, libc-alpha
Cc: Thomas Gleixner, Peter Zijlstra, Ingo Molnar
On 10/18/2017 01:11 AM, Michael Kerrisk (man-pages) wrote:
> Hello all,
>
> Following on from the pthread_spin_init(3) page, I also recently
> drafted a manual page for the pthread_spin_lock() and
> pthread_spin_unlock() APIs. Again, comments and suggestions for
> improvements would be most welcome.
Overall looks good, just a few nits.
> Thanks,
>
> Michael
>
> PTHREAD_SPIN_LOCK(3) Linux Programmer's Manual PTHREAD_SPIN_LOCK(3)
>
> NAME
> pthread_spin_lock, pthread_spin_trylock, pthread_spin_unlock -
> lock and unlock a spin lock
>
> SYNOPSIS
> #include <pthread.h>
>
> int pthread_spin_lock(pthread_spinlock_t *lock);
> int pthread_spin_trylock(pthread_spinlock_t *lock);
> int pthread_spin_unlock(pthread_spinlock_t *lock);
>
> Compile and link with -pthread.
>
> Feature Test Macro Requirements for glibc (see feaâ
> ture_test_macros(7)):
>
> pthread_spin_lock(), pthread_spin_trylock():
> _POSIX_C_SOURCE >= 200112L
>
> DESCRIPTION
> The pthread_spin_lock() function locks the spin lock referred to
> by lock. If the spin lock is currently unlocked, the calling
> thread acquires the lock immediately. If the spin lock is curâ
> rently locked by another thread, the calling thread spins, testing
> the lock until it becomes available, at which point the calling
> thread acquires the lock.
>
> Calling pthread_spin_lock() on a lock that is already held by the
> caller results in undefined behavior.
Similarly if you call pthread_spin_lock on an uninitilized lock you get
undefined behaviour (see EINVAL below). We don't detect this in glibc right
now because it's a waste of time, but we might some day for some reason I
can't know today (say we robustify spin locks). Even if you talk about
this case in pthread_spin_init(), it bears repeating again here.
> The pthread_spin_trylock() function is like pthread_spin_lock(),
> except that if the spin lock referred to by lock is currently
> locked, then, instead of spinning, the call returns immediately
> with the error EBUSY.
>
> The pthread_spin_unlock() function unlocks the spin lock referred
> to lock. If any threads are spinning on the lock, one of those
> threads will then acquire the lock.
>
> Calling pthread_spin_unlock() on a lock that is not held by the
> caller results in undefined behavior.
>
> RETURN VALUE
> On success, there functions return zero. On failure, they return
> an error number.
>
> ERRORS
> pthread_spin_lock() may fail with the following errors:
>
> EDEADLOCK
> The system detected a deadlock condition.
In practice we might have EINVAL some day here to indicate the lock
was not initialized, and that can be returned for all functions if
the cost of detection is low.
>
> pthread_spin_trylock() can fail with the following errors:
>
> EBUSY The spin lock is currently locked by another thread.
I always find the 'can fail' wording a bit wishy-washy for my tastes
and prefer: 'shall fail', along with a statement that defines the
conditions for failure. I say this only because English is not as
precise as I'd like so using 'shall' instead of 'can' makes this
failure mode clearer, indicating to the reader that it will happen
(here it's a bit obvious from the semantics of the function, since
otherwise trylock would be useless).
>
> VERSIONS
> These functions first appeared in glibc in version 2.2.
>
> CONFORMING TO
> POSIX.1-2001.
>
> NOTES
> Applying any of the functions described on this page to an uniniâ
> tialized spin lock results in undefined behavior.
>
> Carefully read NOTES in pthread_spin_init(3).
>
> SEE ALSO
> pthread_spin_destroy(3), pthread_spin_init(3), pthreads(7)
>
> Linux 2017-09-30 PTHREAD_SPIN_LOCK(3)
>
>
--
Cheers,
Carlos.
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: Draft pthread_spin_lock(3) manual page
2017-10-18 15:07 ` Carlos O'Donell
@ 2017-10-19 17:46 ` Michael Kerrisk (man-pages)
2017-10-19 18:06 ` Zack Weinberg
0 siblings, 1 reply; 8+ messages in thread
From: Michael Kerrisk (man-pages) @ 2017-10-19 17:46 UTC (permalink / raw)
To: Carlos O'Donell
Cc: linux-man, libc-alpha, Thomas Gleixner, Peter Zijlstra, Ingo Molnar
Hi Carlos,
Thanks for looking the page over.
On 18 October 2017 at 17:07, Carlos O'Donell <carlos@redhat.com> wrote:
> On 10/18/2017 01:11 AM, Michael Kerrisk (man-pages) wrote:
>> Hello all,
>>
>> Following on from the pthread_spin_init(3) page, I also recently
>> drafted a manual page for the pthread_spin_lock() and
>> pthread_spin_unlock() APIs. Again, comments and suggestions for
>> improvements would be most welcome.
>
> Overall looks good, just a few nits.
>
>> Thanks,
>>
>> Michael
>>
>> PTHREAD_SPIN_LOCK(3) Linux Programmer's Manual PTHREAD_SPIN_LOCK(3)
>>
>> NAME
>> pthread_spin_lock, pthread_spin_trylock, pthread_spin_unlock -
>> lock and unlock a spin lock
>>
>> SYNOPSIS
>> #include <pthread.h>
>>
>> int pthread_spin_lock(pthread_spinlock_t *lock);
>> int pthread_spin_trylock(pthread_spinlock_t *lock);
>> int pthread_spin_unlock(pthread_spinlock_t *lock);
>>
>> Compile and link with -pthread.
>>
>> Feature Test Macro Requirements for glibc (see fea‐
>> ture_test_macros(7)):
>>
>> pthread_spin_lock(), pthread_spin_trylock():
>> _POSIX_C_SOURCE >= 200112L
>>
>> DESCRIPTION
>> The pthread_spin_lock() function locks the spin lock referred to
>> by lock. If the spin lock is currently unlocked, the calling
>> thread acquires the lock immediately. If the spin lock is cur‐
>> rently locked by another thread, the calling thread spins, testing
>> the lock until it becomes available, at which point the calling
>> thread acquires the lock.
>>
>> Calling pthread_spin_lock() on a lock that is already held by the
>> caller results in undefined behavior.
>
> Similarly if you call pthread_spin_lock on an uninitilized lock you get
> undefined behaviour (see EINVAL below). We don't detect this in glibc right
I added the uninitialized lock case to the text.
> now because it's a waste of time, but we might some day for some reason I
> can't know today (say we robustify spin locks). Even if you talk about
> this case in pthread_spin_init(), it bears repeating again here.
>
>> The pthread_spin_trylock() function is like pthread_spin_lock(),
>> except that if the spin lock referred to by lock is currently
>> locked, then, instead of spinning, the call returns immediately
>> with the error EBUSY.
>>
>> The pthread_spin_unlock() function unlocks the spin lock referred
>> to lock. If any threads are spinning on the lock, one of those
>> threads will then acquire the lock.
>>
>> Calling pthread_spin_unlock() on a lock that is not held by the
>> caller results in undefined behavior.
>>
>> RETURN VALUE
>> On success, there functions return zero. On failure, they return
>> an error number.
>>
>> ERRORS
>> pthread_spin_lock() may fail with the following errors:
>>
>> EDEADLOCK
>> The system detected a deadlock condition.
>
> In practice we might have EINVAL some day here to indicate the lock
> was not initialized, and that can be returned for all functions if
> the cost of detection is low.
Okay. (I presume you did not mean any text needs to be added to the page.)
>> pthread_spin_trylock() can fail with the following errors:
>>
>> EBUSY The spin lock is currently locked by another thread.
>
> I always find the 'can fail' wording a bit wishy-washy for my tastes
> and prefer: 'shall fail', along with a statement that defines the
> conditions for failure. I say this only because English is not as
> precise as I'd like so using 'shall' instead of 'can' makes this
> failure mode clearer, indicating to the reader that it will happen
> (here it's a bit obvious from the semantics of the function, since
> otherwise trylock would be useless).
Changed to "shall fail" (but this is not the only page with that problem :-} ).
Thanks,
Michael
>> VERSIONS
>> These functions first appeared in glibc in version 2.2.
>>
>> CONFORMING TO
>> POSIX.1-2001.
>>
>> NOTES
>> Applying any of the functions described on this page to an unini‐
>> tialized spin lock results in undefined behavior.
>>
>> Carefully read NOTES in pthread_spin_init(3).
>>
>> SEE ALSO
>> pthread_spin_destroy(3), pthread_spin_init(3), pthreads(7)
>>
>> Linux 2017-09-30 PTHREAD_SPIN_LOCK(3)
>>
>>
>
>
> --
> Cheers,
> Carlos.
--
Michael Kerrisk
Linux man-pages maintainer; http://www.kernel.org/doc/man-pages/
Linux/UNIX System Programming Training: http://man7.org/training/
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: Draft pthread_spin_lock(3) manual page
2017-10-19 17:46 ` Michael Kerrisk (man-pages)
@ 2017-10-19 18:06 ` Zack Weinberg
2017-10-19 18:43 ` Carlos O'Donell
` (2 more replies)
0 siblings, 3 replies; 8+ messages in thread
From: Zack Weinberg @ 2017-10-19 18:06 UTC (permalink / raw)
To: Michael Kerrisk (man-pages)
Cc: Carlos O'Donell, linux-man, libc-alpha, Thomas Gleixner,
Peter Zijlstra, Ingo Molnar
On Thu, Oct 19, 2017 at 1:46 PM, Michael Kerrisk (man-pages)
<mtk.manpages@gmail.com> wrote:
> On 18 October 2017 at 17:07, Carlos O'Donell <carlos@redhat.com> wrote:
>
>>> pthread_spin_trylock() can fail with the following errors:
>>>
>>> EBUSY The spin lock is currently locked by another thread.
>>
>> I always find the 'can fail' wording a bit wishy-washy for my tastes
>> and prefer: 'shall fail', along with a statement that defines the
>> conditions for failure. I say this only because English is not as
>> precise as I'd like so using 'shall' instead of 'can' makes this
>> failure mode clearer, indicating to the reader that it will happen
>> (here it's a bit obvious from the semantics of the function, since
>> otherwise trylock would be useless).
>
> Changed to "shall fail" (but this is not the only page with that problem :-} ).
I meant to reply earlier. This is a pet English grammar peeve of
mine: "shall" is a _directive_. Specifications use it because they
are directing the implementors to make things happen, but in
documentation aimed at people _using_ an interface, the appropriate
word is "will". The function _will_ fail and set errno under the
following conditions yada yada. That's what it does. You, the reader
of this manpage, do not have to do anything to make that happen.
zw
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: Draft pthread_spin_lock(3) manual page
2017-10-19 18:06 ` Zack Weinberg
@ 2017-10-19 18:43 ` Carlos O'Donell
2017-10-19 19:27 ` Michael Kerrisk (man-pages)
2017-10-20 10:13 ` Pedro Alves
2 siblings, 0 replies; 8+ messages in thread
From: Carlos O'Donell @ 2017-10-19 18:43 UTC (permalink / raw)
To: Zack Weinberg, Michael Kerrisk (man-pages)
Cc: linux-man, libc-alpha, Thomas Gleixner, Peter Zijlstra, Ingo Molnar
On 10/19/2017 11:06 AM, Zack Weinberg wrote:
> On Thu, Oct 19, 2017 at 1:46 PM, Michael Kerrisk (man-pages)
> <mtk.manpages@gmail.com> wrote:
>> On 18 October 2017 at 17:07, Carlos O'Donell <carlos@redhat.com> wrote:
>>
>>>> pthread_spin_trylock() can fail with the following errors:
>>>>
>>>> EBUSY The spin lock is currently locked by another thread.
>>>
>>> I always find the 'can fail' wording a bit wishy-washy for my tastes
>>> and prefer: 'shall fail', along with a statement that defines the
>>> conditions for failure. I say this only because English is not as
>>> precise as I'd like so using 'shall' instead of 'can' makes this
>>> failure mode clearer, indicating to the reader that it will happen
>>> (here it's a bit obvious from the semantics of the function, since
>>> otherwise trylock would be useless).
>>
>> Changed to "shall fail" (but this is not the only page with that problem :-} ).
>
> I meant to reply earlier. This is a pet English grammar peeve of
> mine: "shall" is a _directive_. Specifications use it because they
> are directing the implementors to make things happen, but in
> documentation aimed at people _using_ an interface, the appropriate
> word is "will". The function _will_ fail and set errno under the
> following conditions yada yada. That's what it does. You, the reader
> of this manpage, do not have to do anything to make that happen.
I will endeavour to adopt such a distinction in my future writing.
I appreciate that feedback :-)
--
Cheers,
Carlos.
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: Draft pthread_spin_lock(3) manual page
2017-10-19 18:06 ` Zack Weinberg
2017-10-19 18:43 ` Carlos O'Donell
@ 2017-10-19 19:27 ` Michael Kerrisk (man-pages)
2017-10-20 10:13 ` Pedro Alves
2 siblings, 0 replies; 8+ messages in thread
From: Michael Kerrisk (man-pages) @ 2017-10-19 19:27 UTC (permalink / raw)
To: Zack Weinberg
Cc: Carlos O'Donell, linux-man, libc-alpha, Thomas Gleixner,
Peter Zijlstra, Ingo Molnar
Hello Zack,
On 19 October 2017 at 20:06, Zack Weinberg <zackw@panix.com> wrote:
> On Thu, Oct 19, 2017 at 1:46 PM, Michael Kerrisk (man-pages)
> <mtk.manpages@gmail.com> wrote:
>> On 18 October 2017 at 17:07, Carlos O'Donell <carlos@redhat.com> wrote:
>>
>>>> pthread_spin_trylock() can fail with the following errors:
>>>>
>>>> EBUSY The spin lock is currently locked by another thread.
>>>
>>> I always find the 'can fail' wording a bit wishy-washy for my tastes
>>> and prefer: 'shall fail', along with a statement that defines the
>>> conditions for failure. I say this only because English is not as
>>> precise as I'd like so using 'shall' instead of 'can' makes this
>>> failure mode clearer, indicating to the reader that it will happen
>>> (here it's a bit obvious from the semantics of the function, since
>>> otherwise trylock would be useless).
>>
>> Changed to "shall fail" (but this is not the only page with that problem :-} ).
>
> I meant to reply earlier. This is a pet English grammar peeve of
> mine: "shall" is a _directive_. Specifications use it because they
> are directing the implementors to make things happen, but in
> documentation aimed at people _using_ an interface, the appropriate
> word is "will". The function _will_ fail and set errno under the
> following conditions yada yada. That's what it does. You, the reader
> of this manpage, do not have to do anything to make that happen.
Yes, it's true. s/shall/will/. Done.
Cheers,
Michael
--
Michael Kerrisk
Linux man-pages maintainer; http://www.kernel.org/doc/man-pages/
Linux/UNIX System Programming Training: http://man7.org/training/
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: Draft pthread_spin_lock(3) manual page
2017-10-19 18:06 ` Zack Weinberg
2017-10-19 18:43 ` Carlos O'Donell
2017-10-19 19:27 ` Michael Kerrisk (man-pages)
@ 2017-10-20 10:13 ` Pedro Alves
2017-10-20 14:56 ` Michael Kerrisk (man-pages)
2 siblings, 1 reply; 8+ messages in thread
From: Pedro Alves @ 2017-10-20 10:13 UTC (permalink / raw)
To: Zack Weinberg, Michael Kerrisk (man-pages)
Cc: Carlos O'Donell, linux-man, libc-alpha, Thomas Gleixner,
Peter Zijlstra, Ingo Molnar
On 10/19/2017 07:06 PM, Zack Weinberg wrote:
> On Thu, Oct 19, 2017 at 1:46 PM, Michael Kerrisk (man-pages)
> I meant to reply earlier. This is a pet English grammar peeve of
> mine: "shall" is a _directive_. Specifications use it because they
> are directing the implementors to make things happen, but in
> documentation aimed at people _using_ an interface, the appropriate
> word is "will". The function _will_ fail and set errno under the
> following conditions yada yada. That's what it does. You, the reader
> of this manpage, do not have to do anything to make that happen.
Technical writing guidelines usually suggest staying in the
present tense, and avoid future tense though, because with "will"
it's not clear whether you're describing how things behave as
currently implemented or whether you're talking about how things
will be implemented in the future.
I.e.:
... foo fails and sets errno if/when ...
instead of:
... foo will fail and set errno if/when ...
Here's an example:
http://www.datacenterjournal.com/technically-write-advice-technical-writing/
And here's Sandra applying that same rule throughout GCC's manual:
[[doc] extend.texi copy-editing, 1/N (verb tenses)]
https://gcc.gnu.org/ml/gcc-patches/2012-10/msg02688.html
(I recalled that whole series of Sandra's as I found
it quite instructive back then.)
Thanks,
Pedro Alves
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: Draft pthread_spin_lock(3) manual page
2017-10-20 10:13 ` Pedro Alves
@ 2017-10-20 14:56 ` Michael Kerrisk (man-pages)
0 siblings, 0 replies; 8+ messages in thread
From: Michael Kerrisk (man-pages) @ 2017-10-20 14:56 UTC (permalink / raw)
To: Pedro Alves
Cc: Zack Weinberg, Carlos O'Donell, linux-man, libc-alpha,
Thomas Gleixner, Peter Zijlstra, Ingo Molnar
Hello Pedro,
On 20 October 2017 at 12:12, Pedro Alves <palves@redhat.com> wrote:
> On 10/19/2017 07:06 PM, Zack Weinberg wrote:
>> On Thu, Oct 19, 2017 at 1:46 PM, Michael Kerrisk (man-pages)
>
>> I meant to reply earlier. This is a pet English grammar peeve of
>> mine: "shall" is a _directive_. Specifications use it because they
>> are directing the implementors to make things happen, but in
>> documentation aimed at people _using_ an interface, the appropriate
>> word is "will". The function _will_ fail and set errno under the
>> following conditions yada yada. That's what it does. You, the reader
>> of this manpage, do not have to do anything to make that happen.
>
> Technical writing guidelines usually suggest staying in the
> present tense, and avoid future tense though, because with "will"
> it's not clear whether you're describing how things behave as
> currently implemented or whether you're talking about how things
> will be implemented in the future.
>
> I.e.:
> ... foo fails and sets errno if/when ...
> instead of:
> ... foo will fail and set errno if/when ...
>
> Here's an example:
>
>
> http://www.datacenterjournal.com/technically-write-advice-technical-writing/
>
> And here's Sandra applying that same rule throughout GCC's manual:
>
> [[doc] extend.texi copy-editing, 1/N (verb tenses)]
> https://gcc.gnu.org/ml/gcc-patches/2012-10/msg02688.html
>
> (I recalled that whole series of Sandra's as I found
> it quite instructive back then.)
Fair enough, I've fixed "will fail" in a number of pages!
Cheers,
Michael
--
Michael Kerrisk
Linux man-pages maintainer; http://www.kernel.org/doc/man-pages/
Linux/UNIX System Programming Training: http://man7.org/training/
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2017-10-20 14:56 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-10-18 8:13 Draft pthread_spin_lock(3) manual page Michael Kerrisk (man-pages)
2017-10-18 15:07 ` Carlos O'Donell
2017-10-19 17:46 ` Michael Kerrisk (man-pages)
2017-10-19 18:06 ` Zack Weinberg
2017-10-19 18:43 ` Carlos O'Donell
2017-10-19 19:27 ` Michael Kerrisk (man-pages)
2017-10-20 10:13 ` Pedro Alves
2017-10-20 14:56 ` Michael Kerrisk (man-pages)
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).