xref: /freebsd/share/man/man9/sx.9 (revision 5521ff5a4d1929056e7ffc982fac3341ca54df7c)
1.\"
2.\" Copyright (C) 2001 Jason Evans <jasone@freebsd.org>.  All rights reserved.
3.\"
4.\" Redistribution and use in source and binary forms, with or without
5.\" modification, are permitted provided that the following conditions
6.\" are met:
7.\" 1. Redistributions of source code must retain the above copyright
8.\"    notice(s), this list of conditions and the following disclaimer as
9.\"    the first lines of this file unmodified other than the possible
10.\"    addition of one or more copyright notices.
11.\" 2. Redistributions in binary form must reproduce the above copyright
12.\"    notice(s), this list of conditions and the following disclaimer in the
13.\"    documentation and/or other materials provided with the distribution.
14.\"
15.\" THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER(S) ``AS IS'' AND ANY
16.\" EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
17.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
18.\" DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) BE LIABLE FOR ANY
19.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
20.\" (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
21.\" SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
22.\" CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
23.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
24.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
25.\" DAMAGE.
26.\"
27.\" $FreeBSD$
28.\"
29.Dd February 26, 2001
30.Dt SX 9
31.Os
32.Sh NAME
33.Nm sx ,
34.Nm sx_init ,
35.Nm sx_destroy ,
36.Nm sx_slock ,
37.Nm sx_xlock ,
38.Nm sx_sunlock ,
39.Nm sx_xunlock
40.Nd kernel shared/exclusive lock
41.Sh SYNOPSIS
42.Fd #include <sys/types.h>
43.Fd #include <sys/lock.h>
44.Fd #include <sys/mutex.h>
45.Fd #include <sys/sx.h>
46.Ft void
47.Fn sx_init "struct sx *sx" "const char *description"
48.Ft void
49.Fn sx_destroy "struct sx *sx"
50.Ft void
51.Fn sx_slock "struct sx *sx"
52.Ft void
53.Fn sx_xlock "struct sx *sx"
54.Ft void
55.Fn sx_sunlock "struct sx *sx"
56.Ft void
57.Fn sx_xunlock "struct sx *sx"
58.Sh DESCRIPTION
59Shared/exclusive locks are used to protect data that are read far more often
60than they are written.
61Mutexes are inherently more efficient than shared/exclusive locks, so
62shared/exclusive locks should be used prudently.
63.Pp
64Shared/exclusive locks are created with
65.Fn sx_init ,
66where
67.Fa sx
68is a pointer to space for a
69.Vt struct sx ,
70and
71.Fa description
72is a pointer to a null-terminated character string that describes the
73shared/exclusive lock.
74Shared/exclusive locks are destroyed with
75.Fn sx_destroy .
76Threads acquire and release a shared lock by calling
77.Fn sx_slock
78and
79.Fn sx_sunlock .
80Threads acquire and release an exclusive lock by calling
81.Fn sx_xlock
82and
83.Fn sx_xunlock .
84.Pp
85A thread may not own a shared lock and an exclusive lock simultaneously;
86attempting to do so will result in deadlock.
87.Sh SEE ALSO
88.Xr mutex 9
89