summaryrefslogtreecommitdiff
path: root/usr/src/man/man7/condition.7
diff options
context:
space:
mode:
Diffstat (limited to 'usr/src/man/man7/condition.7')
-rw-r--r--usr/src/man/man7/condition.7154
1 files changed, 154 insertions, 0 deletions
diff --git a/usr/src/man/man7/condition.7 b/usr/src/man/man7/condition.7
new file mode 100644
index 0000000000..017ffbbeb5
--- /dev/null
+++ b/usr/src/man/man7/condition.7
@@ -0,0 +1,154 @@
+.\"
+.\" Sun Microsystems, Inc. gratefully acknowledges The Open Group for
+.\" permission to reproduce portions of its copyrighted documentation.
+.\" Original documentation from The Open Group can be obtained online at
+.\" http://www.opengroup.org/bookstore/.
+.\"
+.\" The Institute of Electrical and Electronics Engineers and The Open
+.\" Group, have given us permission to reprint portions of their
+.\" documentation.
+.\"
+.\" In the following statement, the phrase ``this text'' refers to portions
+.\" of the system documentation.
+.\"
+.\" Portions of this text are reprinted and reproduced in electronic form
+.\" in the SunOS Reference Manual, from IEEE Std 1003.1, 2004 Edition,
+.\" Standard for Information Technology -- Portable Operating System
+.\" Interface (POSIX), The Open Group Base Specifications Issue 6,
+.\" Copyright (C) 2001-2004 by the Institute of Electrical and Electronics
+.\" Engineers, Inc and The Open Group. In the event of any discrepancy
+.\" between these versions 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.
+.\"
+.\" This notice shall appear on any product containing this material.
+.\"
+.\" The contents of this file are subject to the terms of the
+.\" Common Development and Distribution License (the "License").
+.\" You may not use this file except in compliance with the License.
+.\"
+.\" You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+.\" or http://www.opensolaris.org/os/licensing.
+.\" See the License for the specific language governing permissions
+.\" and limitations under the License.
+.\"
+.\" When distributing Covered Code, include this CDDL HEADER in each
+.\" file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+.\" If applicable, add the following below this CDDL HEADER, with the
+.\" fields enclosed by brackets "[]" replaced with your own identifying
+.\" information: Portions Copyright [yyyy] [name of copyright owner]
+.\"
+.\"
+.\" Portions Copyright (c) 1995 IEEE All Rights Reserved
+.\" Copyright (c) 1998 Sun Microsystems, Inc. All Rights Reserved.
+.\" Copyright (c) 2001, The IEEE and The Open Group. All Rights Reserved.
+.\"
+.TH CONDITION 7 "May 16, 2020"
+.SH NAME
+condition \- concepts related to condition variables
+.SH DESCRIPTION
+Occasionally, a thread running within a mutex needs to wait for an event, in
+which case it blocks or sleeps. When a thread is waiting for another thread to
+communicate its disposition, it uses a condition variable in conjunction with a
+mutex. Although a mutex is exclusive and the code it protects is sharable (at
+certain moments), condition variables enable the synchronization of differing
+events that share a mutex, but not necessarily data. Several condition
+variables may be used by threads to signal each other when a task is complete,
+which then allows the next waiting thread to take ownership of the mutex.
+.sp
+.LP
+A condition variable enables threads to atomically block and test the condition
+under the protection of a mutual exclusion lock (mutex) until the condition is
+satisfied. If the condition is false, a thread blocks on a condition variable
+and atomically releases the mutex that is waiting for the condition to change.
+If another thread changes the condition, it may wake up waiting threads by
+signaling the associated condition variable. The waiting threads, upon
+awakening, reacquire the mutex and re-evaluate the condition.
+.SS "Initialize"
+Condition variables and mutexes should be global. Condition variables that are
+allocated in writable memory can synchronize threads among processes if they
+are shared by the cooperating processes (see \fBmmap\fR(2)) and are initialized
+for this purpose.
+.sp
+.LP
+The scope of a condition variable is either intra-process or inter-process.
+This is dependent upon whether the argument is passed implicitly or explicitly
+to the initialization of that condition variable. A condition variable does
+not need to be explicitly initialized. A condition variable is initialized with
+all zeros, by default, and its scope is set to within the calling process. For
+inter-process synchronization, a condition variable must be initialized once,
+and only once, before use.
+.sp
+.LP
+A condition variable must not be simultaneously initialized by multiple threads
+or re-initialized while in use by other threads.
+.sp
+.LP
+Condition variables attributes may be set to the default or customized at
+initialization. POSIX threads even allow the default values to be customized.
+Establishing these attributes varies depending upon whether POSIX or Solaris
+threads are used. Similar to the distinctions between POSIX and Solaris thread
+creation, POSIX condition variables implement the default, intra-process,
+unless an attribute object is modified for inter-process prior to the
+initialization of the condition variable. Solaris condition variables also
+implement as the default, intra-process; however, they set this attribute
+according to the argument, \fItype\fR, passed to their initialization function.
+.SS "Condition Wait"
+The condition wait interface allows a thread to wait for a condition and
+atomically release the associated mutex that it needs to hold to check the
+condition. The thread waits for another thread to make the condition true and
+that thread's resulting call to signal and wakeup the waiting thread.
+.SS "Condition Signaling"
+A condition signal allows a thread to unblock the next thread waiting on the
+condition variable, whereas, a condition broadcast allows a thread to unblock
+all threads waiting on the condition variable.
+.SS "Destroy"
+The condition destroy functions destroy any state, but not the space,
+associated with the condition variable.
+.SH ATTRIBUTES
+See \fBattributes\fR(7) for descriptions of the following attributes:
+.sp
+
+.sp
+.TS
+box;
+c | c
+l | l .
+ATTRIBUTE TYPE ATTRIBUTE VALUE
+_
+MT-Level MT-Safe
+.TE
+
+.SH SEE ALSO
+.BR fork (2),
+.BR mmap (2),
+.BR setitimer (2),
+.BR shmop (2),
+.BR cond_broadcast (3C),
+.BR cond_destroy (3C),
+.BR cond_init (3C),
+.BR cond_signal (3C),
+.BR cond_timedwait (3C),
+.BR cond_wait (3C),
+.BR pthread_cond_broadcast (3C),
+.BR pthread_cond_destroy (3C),
+.BR pthread_cond_init (3C),
+.BR pthread_cond_signal (3C),
+.BR pthread_cond_timedwait (3C),
+.BR pthread_cond_wait (3C),
+.BR pthread_condattr_init (3C),
+.BR signal (3C),
+.BR attributes (7),
+.BR mutex (7),
+.BR standards (7)
+.SH NOTES
+If more than one thread is blocked on a condition variable, the order in which
+threads are unblocked is determined by the scheduling policy.
+.sp
+.LP
+\fBUSYNC_THREAD\fR does not support multiple mappings to the same logical
+synch object. If you need to \fBmmap()\fR a synch object to different locations
+within the same address space, then the synch object should be initialized as a
+shared object \fBUSYNC_PROCESS\fR for Solaris, and
+\fBPTHREAD_PROCESS_PRIVATE\fR for POSIX.