Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/lib/libpthread Rearrange, reword, clarify. Remove duplicate ...
details: https://anonhg.NetBSD.org/src/rev/78ce080b2f4b
branches: trunk
changeset: 756258:78ce080b2f4b
user: jruoho <jruoho%NetBSD.org@localhost>
date: Fri Jul 09 18:01:53 2010 +0000
description:
Rearrange, reword, clarify. Remove duplicate paragraphs and recurring
sentences. Update the ERRORS to reflect reality in NetBSD.
diffstat:
lib/libpthread/pthread_cond.3 | 199 ++++++++++++++---------------------------
1 files changed, 67 insertions(+), 132 deletions(-)
diffs (truncated from 313 to 300 lines):
diff -r fc4bca91e206 -r 78ce080b2f4b lib/libpthread/pthread_cond.3
--- a/lib/libpthread/pthread_cond.3 Fri Jul 09 17:54:08 2010 +0000
+++ b/lib/libpthread/pthread_cond.3 Fri Jul 09 18:01:53 2010 +0000
@@ -1,4 +1,4 @@
-.\" $NetBSD: pthread_cond.3,v 1.3 2010/07/09 10:55:11 wiz Exp $
+.\" $NetBSD: pthread_cond.3,v 1.4 2010/07/09 18:01:53 jruoho Exp $
.\"
.\" Copyright (c) 2002, 2008 The NetBSD Foundation, Inc.
.\" All rights reserved.
@@ -66,8 +66,6 @@
.Ft int
.Fn pthread_cond_init "pthread_cond_t * restrict cond" \
"const pthread_condattr_t * restrict attr"
-.Pp
-.Va pthread_cond_t cond = Dv PTHREAD_COND_INITIALIZER;
.Ft int
.Fn pthread_cond_destroy "pthread_cond_t *cond"
.Ft int
@@ -80,8 +78,19 @@
.Ft int
.Fn pthread_cond_timedwait "pthread_cond_t * restrict cond" \
"pthread_mutex_t * restrict mutex" "const struct timespec * restrict abstime"
+.Pp
+.Va pthread_cond_t cond = Dv PTHREAD_COND_INITIALIZER;
.\" ----------------------------------------------------------------------------
.Sh DESCRIPTION
+Condition variables are intended to be used to communicate changes in
+the state of data shared between threads.
+Condition variables are always associated with a mutex to provide
+synchronized access to the shared data.
+A single predicate should always be associated with a
+condition variable.
+The predicate should identify a state of the
+shared data that must be true before the thread proceeds.
+.Pp
The
.Fn pthread_cond_init
function creates a new condition variable, with attributes specified with
@@ -91,15 +100,10 @@
is
.Dv NULL
the default attributes are used.
-.Pp
-Condition variables are intended to be used to communicate changes in
-the state of data shared between threads.
-Condition variables are always associated with a mutex to provide
-synchronized access to the shared data.
-A single predicate should always be associated with a
-condition variable.
-The predicate should identify a state of the
-shared data that must be true before the thread proceeds.
+The
+.Fn pthread_cond_destroy
+function frees the resources allocated by the condition variable
+.Fa cond .
.Pp
The macro
.Dv PTHREAD_COND_INITIALIZER
@@ -114,46 +118,20 @@
except that no error checking is done.
.Pp
.\" -----
-The
-.Fn pthread_cond_destroy
-function frees the resources allocated by the condition variable
-.Fa cond .
-.Pp
-.\" -----
-The
+The difference between
.Fn pthread_cond_broadcast
-function unblocks all threads waiting for the condition variable
-.Fa cond .
+and
+.Fn pthread_cond_signal
+is that the former unblocks all threads waiting for the condition variable,
+whereas the latter blocks only one waiting thread.
If no threads are waiting on
.Fa cond ,
-the
-.Fn pthread_cond_broadcast
-function has no effect.
-.Pp
-The
-.Fn pthread_cond_signal
-function unblocks one thread waiting for the condition variable
-.Fa cond .
-If no threads are waiting on
-.Fa cond ,
-the
-.Fn pthread_cond_signal
-function has no effect.
-.Pp
-When calling
-.Fn pthread_cond_wait
-and/or
-.Fn pthread_cond_timedwait ,
-a temporary binding is established between the condition variable
-.Fa cond
-and a caller-supplied mutex.
-.Pp
-The same mutex must be held while calling
-.Fn pthread_cond_broadcast
-and
-.Fn pthread_cond_signal .
-Neither function enforces this requirement, but if the mutex is not
-held the resulting behaviour is undefined.
+neihter function has any effect.
+If more than one thread is blocked on a condition variable,
+the used scheduling policy determines the order in which threads are unblocked.
+The same mutex used for waiting must be held while calling either function.
+Although neither function strictly enforces this requirement,
+undefined behavior may follow if the mutex is not held.
.Pp
.\" -----
The
@@ -163,64 +141,49 @@
.Fa cond ,
and unlocks the mutex specified by
.Fa mutex .
-The waiting thread unblocks after another thread calls
-.Xr pthread_cond_signal 3 ,
-or
-.Xr pthread_cond_broadcast 3
-with the same condition variable.
-The current thread holds the lock on
-.Fa mutex
-upon return from the
-.Fn pthread_cond_wait
-call.
-.Pp
The
.Fn pthread_cond_timedwait
-function atomically blocks the current thread waiting on the condition
-variable specified by
-.Fa cond ,
-and unlocks the mutex specified by
-.Fa mutex .
-The waiting thread unblocks after another thread calls
-.Xr pthread_cond_signal 3 ,
-or
-.Xr pthread_cond_broadcast 3
-with the same condition variable, or if the system time reaches the
-time specified in
+function behaves similarly, but unblocks also
+if the system time reaches the time specified in
.Fa abstime ,
represented as
.Em struct timespec
(see
.Xr timespec 3 ) .
+With both functions the waiting thread unblocks after another thread calls
+.Fn pthread_cond_signal
+or
+.Fn pthread_cond_broadcast
+with the same condition variable and by holding the same
+.Fa mutex
+that was associated with
+.Fa cond
+by either one of the blocking functions.
+The current thread holds the lock on
+.Fa mutex
+upon return from either function.
+.\" -----
.Pp
Note that a call to
.Fn pthread_cond_wait
or
.Fn pthread_cond_timedwait
may wake up spontaneously, without a call to
-.Xr pthread_cond_signal 3
+.Fn pthread_cond_signal
or
-.Xr pthread_cond_broadcast 3 .
-The caller should prepare for this by invoking
-.Fn pthread_cond_wait
-or
-.Fn pthread_cond_timedwait
+.Fn pthread_cond_broadcast .
+The caller should prepare for this by invoking either function
within a predicate loop that tests whether the thread should proceed.
.Pp
-When calling
-.Fn pthread_cond_wait
-or
-.Fn pthread_cond_timedwait ,
+.\" -----
+As noted, when calling either function that waits on a condition variable,
a temporary binding is established between the condition variable
.Fa cond
and the mutex
.Fa mutex .
-.Pp
-The same mutex must be held while calling
-.Fn pthread_cond_broadcast
-and
-.Fn pthread_cond_signal
-on
+During this time, the effect of an attempt by any thread to wait on
+that condition variable using a different mutex is undefined.
+The same mutex must be held while broadcasting or signaling on
.Fa cond .
Additionally, the same mutex must be used for concurrent calls to
.Fn pthread_cond_wait
@@ -233,41 +196,23 @@
behaviour is undefined.
.\" ----------------------------------------------------------------------------
.Sh RETURN VALUES
-If successful, the
+If successful, all functions return zero.
+Otherwise, an error number will be returned to indicate the error.
+.Sh ERRORS
+The
.Fn pthread_cond_init
-function will return zero and put the new condition variable id into
-.Fa cond ,
-otherwise an error number will be returned to indicate the error.
-.Pp
-.\" -----
-If successful, the
-.Fn pthread_cond_destroy ,
-.Fn pthread_cond_signal ,
-.Fn pthread_cond_broadcast ,
-.Fn pthread_cond_wait
-and
-.Fn pthread_cond_timedwait
-will return zero, otherwise an error number will be returned to
-indicate the error.
-.\" ----------------------------------------------------------------------------
-.Sh ERRORS
-.Fn pthread_cond_init
-may fail if:
+function may fail if:
.Bl -tag -width Er
-.It Bq Er EAGAIN
-The system lacks the resources to initialize another condition variable.
.It Bq Er EINVAL
The value specified by
.Fa attr
is invalid.
-.It Bq Er ENOMEM
-The process cannot allocate enough memory to initialize another condition
-variable.
.El
.Pp
.\" -----
+The
.Fn pthread_cond_destroy
-may fail if:
+function may fail if:
.Bl -tag -width Er
.It Bq Er EBUSY
The variable
@@ -280,6 +225,7 @@
.El
.Pp
.\" -----
+Both
.Fn pthread_cond_broadcast
and
.Fn pthread_cond_signal
@@ -292,7 +238,10 @@
.El
.Pp
.\" -----
+Both
.Fn pthread_cond_wait
+and
+.Fn pthread_cond_timedwait
may fail if:
.Bl -tag -width Er
.It Bq Er EINVAL
@@ -301,34 +250,20 @@
or the value specified by
.Fa mutex
is invalid.
+.It Bq Er EPERM
+The value specified by
+.Fa mutex
+was not locked in the condition wait.
.El
.Pp
+The
.Fn pthread_cond_timedwait
-may fail if:
+function may additionally fail if:
.Bl -tag -width Er
-.It Bq Er EINVAL
-The value specified by
-.Fa cond ,
-.Fa mutex ,
-or
-.Fa abstime
-is invalid.
.It Bq Er ETIMEDOUT
The system time has reached or exceeded the time specified in
.Fa abstime .
.El
-.Pp
-.Fn pthread_cond_wait
Home |
Main Index |
Thread Index |
Old Index