2 .\" Copyright (c) 1996 Joerg Wunsch
4 .\" All rights reserved.
6 .\" Redistribution and use in source and binary forms, with or without
7 .\" modification, are permitted provided that the following conditions
9 .\" 1. Redistributions of source code must retain the above copyright
10 .\" notice, this list of conditions and the following disclaimer.
11 .\" 2. Redistributions in binary form must reproduce the above copyright
12 .\" notice, this list of conditions and the following disclaimer in the
13 .\" documentation and/or other materials provided with the distribution.
15 .\" THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY EXPRESS OR
16 .\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
17 .\" OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
18 .\" IN NO EVENT SHALL THE DEVELOPERS BE LIABLE FOR ANY DIRECT, INDIRECT,
19 .\" INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
20 .\" NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
21 .\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
22 .\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23 .\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
24 .\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
47 .Fn msleep "void *chan" "struct mtx *mtx" "int priority" "const char *wmesg" "int timo"
49 .Fn msleep_sbt "void *chan" "struct mtx *mtx" "int priority" \
50 "const char *wmesg" "sbintime_t sbt" "sbintime_t pr" "int flags"
52 .Fn msleep_spin "void *chan" "struct mtx *mtx" "const char *wmesg" "int timo"
54 .Fn msleep_spin_sbt "void *chan" "struct mtx *mtx" "const char *wmesg" \
55 "sbintime_t sbt" "sbintime_t pr" "int flags"
57 .Fn pause "const char *wmesg" "int timo"
59 .Fn pause_sbt "const char *wmesg" "sbintime_t sbt" "sbintime_t pr" \
62 .Fn tsleep "void *chan" "int priority" "const char *wmesg" "int timo"
64 .Fn tsleep_sbt "void *chan" "int priority" "const char *wmesg" \
65 "sbintime_t sbt" "sbintime_t pr" "int flags"
67 .Fn wakeup "void *chan"
69 .Fn wakeup_one "void *chan"
79 handle event-based thread blocking.
80 If a thread must wait for an
81 external event, it is put to sleep by
87 Threads may also wait using one of the locking primitive sleep routines
95 is an arbitrary address that uniquely identifies the event on which
96 the thread is being put to sleep.
97 All threads sleeping on a single
101 often called from inside an interrupt routine, to indicate that the
102 resource the thread was blocking on is available now.
106 specifies a new priority for the thread as well as some optional flags.
107 If the new priority is not 0,
108 then the thread will be made
109 runnable with the specified
113 should never be used, as it is for compatibility only.
114 A new priority of 0 means to use the thread's current priority when
115 it is made runnable again.
121 flag, pending signals are allowed to interrupt the sleep, otherwise
122 pending signals are ignored during the sleep.
125 is set and a signal becomes pending,
127 is returned if the current system call should be restarted if
130 is returned if the system call should be interrupted by the signal
135 flag is specified in addition to
137 then the sleeping thread is not stopped when
140 or some other stop action occurs while it is sleeping.
141 Instead, it is woken up, with the assumption
142 that the stop will occur on reaching a stop
143 point when returning to usermode.
144 The flag should be used when the sleeping thread owns resources, for instance
145 vnode locks, that should be released in a timely fashion.
149 is a string describing the sleep condition for tools like
151 Due to the limited space of those programs to display arbitrary strings,
152 this message should not be longer than 6 characters.
156 specifies a timeout for the sleep.
160 then the thread will sleep for at most
163 If the timeout expires,
164 then the sleep function will return
168 .Fn msleep_spin_sbt ,
176 It allows the caller to specify relative or absolute wakeup time with higher resolution
181 allows the caller to specify wanted absolute event precision.
184 allows the caller to pass additional
185 .Fn callout_reset_sbt
188 Several of the sleep functions including
191 and the locking primitive sleep routines specify an additional lock
193 The lock will be released before sleeping and reacquired
194 before the sleep routine returns.
200 the lock will not be reacquired before returning.
201 The lock is used to ensure that a condition can be checked atomically,
202 and that the current thread can be suspended without missing a
203 change to the condition, or an associated wakeup.
204 In addition, all of the sleep routines will fully drop the
208 while the thread is suspended and will reacquire the
210 mutex before the function returns.
213 mutex may be specified as the lock to drop.
214 In that case, however, the
218 To avoid lost wakeups,
219 either a lock should be used to protect against races,
220 or a timeout should be specified to place an upper bound on the delay due
225 function should only be invoked with a timeout of 0 when the
231 function requires that
233 reference a default, i.e. non-spin, mutex.
234 Its use is deprecated in favor of
236 which provides identical behavior.
240 function requires that
242 reference a spin mutex.
245 function does not accept a
247 parameter and thus does not support changing the current thread's priority,
251 or catching signals via the
257 function is a wrapper around
259 that suspends execution of the current thread for the indicated timeout.
260 The thread can not be awakened early by signals or calls to
267 function makes the first thread in the queue that is sleeping on the
271 This reduces the load when a large number of threads are sleeping on
272 the same address, but only one of them can actually do any useful work
275 Due to the way it works, the
277 function requires that only related threads sleep on a specific
280 It is the programmer's responsibility to choose a unique
285 function did not require this, though it was never good practice
286 for threads to share a
293 pay particular attention to ensure that no other threads wait on the
297 When awakened by a call to
301 if a signal is pending and
304 a non-zero error code is returned.
305 If the thread is awakened by a call to
313 and locking primitive sleep functions return 0.
314 Otherwise, a non-zero error code is returned.
319 and the locking primitive sleep functions will fail if:
324 flag was specified, a signal was caught, and the system call should be
329 flag was specified, a signal was caught, and the system call should be
331 .It Bq Er EWOULDBLOCK
332 A non-zero timeout was specified and the timeout expired.
350 They were probably also present in the preceding
353 They were the basic process synchronization model.
359 and added the parameters
365 function was removed in
385 This manual page was written by
386 .An J\(:org Wunsch Aq joerg@FreeBSD.org .