summaryrefslogtreecommitdiffstats
path: root/man-pages-posix-2017/man3p/pthread_cond_destroy.3p
diff options
context:
space:
mode:
Diffstat (limited to 'man-pages-posix-2017/man3p/pthread_cond_destroy.3p')
-rw-r--r--man-pages-posix-2017/man3p/pthread_cond_destroy.3p228
1 files changed, 228 insertions, 0 deletions
diff --git a/man-pages-posix-2017/man3p/pthread_cond_destroy.3p b/man-pages-posix-2017/man3p/pthread_cond_destroy.3p
new file mode 100644
index 0000000..50bf656
--- /dev/null
+++ b/man-pages-posix-2017/man3p/pthread_cond_destroy.3p
@@ -0,0 +1,228 @@
+'\" et
+.TH PTHREAD_COND_DESTROY "3P" 2017 "IEEE/The Open Group" "POSIX Programmer's Manual"
+.\"
+.SH PROLOG
+This manual page is part of the POSIX Programmer's Manual.
+The Linux implementation of this interface may differ (consult
+the corresponding Linux manual page for details of Linux behavior),
+or the interface may not be implemented on Linux.
+.\"
+.SH NAME
+pthread_cond_destroy,
+pthread_cond_init
+\(em destroy and initialize condition variables
+.SH SYNOPSIS
+.LP
+.nf
+#include <pthread.h>
+.P
+int pthread_cond_destroy(pthread_cond_t *\fIcond\fP);
+int pthread_cond_init(pthread_cond_t *restrict \fIcond\fP,
+ const pthread_condattr_t *restrict \fIattr\fP);
+pthread_cond_t \fIcond\fP = PTHREAD_COND_INITIALIZER;
+.fi
+.SH DESCRIPTION
+The
+\fIpthread_cond_destroy\fR()
+function shall destroy the given condition variable specified by
+.IR cond ;
+the object becomes, in effect, uninitialized. An implementation may
+cause
+\fIpthread_cond_destroy\fR()
+to set the object referenced by
+.IR cond
+to an invalid value. A destroyed condition variable object can be
+reinitialized using
+\fIpthread_cond_init\fR();
+the results of otherwise referencing the object after it has been
+destroyed are undefined.
+.P
+It shall be safe to destroy an initialized condition variable upon which
+no threads are currently blocked. Attempting to destroy a condition
+variable upon which other threads are currently blocked results in
+undefined behavior.
+.P
+The
+\fIpthread_cond_init\fR()
+function shall initialize the condition variable referenced by
+.IR cond
+with attributes referenced by
+.IR attr .
+If
+.IR attr
+is NULL, the default condition variable attributes shall be used; the
+effect is the same as passing the address of a default condition
+variable attributes object. Upon successful initialization, the state
+of the condition variable shall become initialized.
+.P
+See
+.IR "Section 2.9.9" ", " "Synchronization Object Copies and Alternative Mappings"
+for further requirements.
+.P
+Attempting to initialize an already initialized condition variable
+results in undefined behavior.
+.P
+In cases where default condition variable attributes are appropriate,
+the macro PTHREAD_COND_INITIALIZER can be used to initialize condition
+variables. The effect shall be equivalent to dynamic initialization by
+a call to
+\fIpthread_cond_init\fR()
+with parameter
+.IR attr
+specified as NULL, except that no error checks are performed.
+.P
+The behavior is undefined if the value specified by the
+.IR cond
+argument to
+\fIpthread_cond_destroy\fR()
+does not refer to an initialized condition variable.
+.P
+The behavior is undefined if the value specified by the
+.IR attr
+argument to
+\fIpthread_cond_init\fR()
+does not refer to an initialized condition variable attributes object.
+.SH "RETURN VALUE"
+If successful, the
+\fIpthread_cond_destroy\fR()
+and
+\fIpthread_cond_init\fR()
+functions shall return zero; otherwise, an error number shall be
+returned to indicate the error.
+.SH ERRORS
+The
+\fIpthread_cond_init\fR()
+function shall fail if:
+.TP
+.BR EAGAIN
+The system lacked the necessary resources (other than memory) to
+initialize another condition variable.
+.TP
+.BR ENOMEM
+Insufficient memory exists to initialize the condition variable.
+.P
+These functions shall not return an error code of
+.BR [EINTR] .
+.LP
+.IR "The following sections are informative."
+.SH EXAMPLES
+A condition variable can be destroyed immediately after all the threads
+that are blocked on it are awakened. For example, consider the
+following code:
+.sp
+.RS 4
+.nf
+
+struct list {
+ pthread_mutex_t lm;
+ ...
+}
+.P
+struct elt {
+ key k;
+ int busy;
+ pthread_cond_t notbusy;
+ ...
+}
+.P
+/* Find a list element and reserve it. */
+struct elt *
+list_find(struct list *lp, key k)
+{
+ struct elt *ep;
+.P
+ pthread_mutex_lock(&lp->lm);
+ while ((ep = find_elt(l, k) != NULL) && ep->busy)
+ pthread_cond_wait(&ep->notbusy, &lp->lm);
+ if (ep != NULL)
+ ep->busy = 1;
+ pthread_mutex_unlock(&lp->lm);
+ return(ep);
+}
+.P
+delete_elt(struct list *lp, struct elt *ep)
+{
+ pthread_mutex_lock(&lp->lm);
+ assert(ep->busy);
+ ... remove ep from list ...
+ ep->busy = 0; /* Paranoid. */
+(A) pthread_cond_broadcast(&ep->notbusy);
+ pthread_mutex_unlock(&lp->lm);
+(B) pthread_cond_destroy(&ep->notbusy);
+ free(ep);
+}
+.fi
+.P
+.RE
+.P
+In this example, the condition variable and its list element may be
+freed (line B) immediately after all threads waiting for it are
+awakened (line A), since the mutex and the code ensure that no other
+thread can touch the element to be deleted.
+.SH "APPLICATION USAGE"
+None.
+.SH RATIONALE
+If an implementation detects that the value specified by the
+.IR cond
+argument to
+\fIpthread_cond_destroy\fR()
+does not refer to an initialized condition variable, it is
+recommended that the function should fail and report an
+.BR [EINVAL]
+error.
+.P
+If an implementation detects that the value specified by the
+.IR cond
+argument to
+\fIpthread_cond_destroy\fR()
+or
+\fIpthread_cond_init\fR()
+refers to a condition variable that is in use (for example, in a
+\fIpthread_cond_wait\fR()
+call) by another thread, or detects that the value specified by the
+.IR cond
+argument to
+\fIpthread_cond_init\fR()
+refers to an already initialized condition variable, it is recommended
+that the function should fail and report an
+.BR [EBUSY]
+error.
+.P
+If an implementation detects that the value specified by the
+.IR attr
+argument to
+\fIpthread_cond_init\fR()
+does not refer to an initialized condition variable attributes object,
+it is recommended that the function should fail and report an
+.BR [EINVAL]
+error.
+.P
+See also
+.IR "\fIpthread_mutex_destroy\fR\^(\|)".
+.SH "FUTURE DIRECTIONS"
+None.
+.SH "SEE ALSO"
+.IR "\fIpthread_cond_broadcast\fR\^(\|)",
+.IR "\fIpthread_cond_timedwait\fR\^(\|)",
+.IR "\fIpthread_mutex_destroy\fR\^(\|)"
+.P
+The Base Definitions volume of POSIX.1\(hy2017,
+.IR "\fB<pthread.h>\fP"
+.\"
+.SH COPYRIGHT
+Portions of this text are reprinted and reproduced in electronic form
+from IEEE Std 1003.1-2017, Standard for Information Technology
+-- Portable Operating System Interface (POSIX), The Open Group Base
+Specifications Issue 7, 2018 Edition,
+Copyright (C) 2018 by the Institute of
+Electrical and Electronics Engineers, Inc and The Open Group.
+In the event of any discrepancy between this version and the original IEEE and
+The Open Group Standard, the original IEEE and The Open Group Standard
+is the referee document. The original Standard can be obtained online at
+http://www.opengroup.org/unix/online.html .
+.PP
+Any typographical or formatting errors that appear
+in this page are most likely
+to have been introduced during the conversion of the source files to
+man page format. To report such errors, see
+https://www.kernel.org/doc/man-pages/reporting_bugs.html .