diff options
Diffstat (limited to 'usr/src/man/man7/condition.7')
-rw-r--r-- | usr/src/man/man7/condition.7 | 154 |
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. |