xref: /netbsd-src/lib/libpthread/pthread_once.3 (revision 23c8222edbfb0f0932d88a8351d3a0cf817dfb9e)
1.\" $NetBSD: pthread_once.3,v 1.2 2003/06/08 06:44:32 thorpej Exp $
2.\"
3.\" Copyright (c) 2002 The NetBSD Foundation, Inc.
4.\" All rights reserved.
5.\" Redistribution and use in source and binary forms, with or without
6.\" modification, are permitted provided that the following conditions
7.\" are met:
8.\" 1. Redistributions of source code must retain the above copyright
9.\"    notice, this list of conditions and the following disclaimer.
10.\" 2. Redistributions in binary form must reproduce the above copyright
11.\"    notice, this list of conditions and the following disclaimer in the
12.\"    documentation and/or other materials provided with the distribution.
13.\" 3. Neither the name of The NetBSD Foundation nor the names of its
14.\"    contributors may be used to endorse or promote products derived
15.\"    from this software without specific prior written permission.
16.\" THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
17.\" ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
18.\" TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
19.\" PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
20.\" BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21.\" CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22.\" SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
23.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
24.\" CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
25.\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
26.\" POSSIBILITY OF SUCH DAMAGE.
27.\"
28.\" Copyright (c) 1996 John Birrell <jb@cimlogic.com.au>.
29.\" All rights reserved.
30.\"
31.\" Redistribution and use in source and binary forms, with or without
32.\" modification, are permitted provided that the following conditions
33.\" are met:
34.\" 1. Redistributions of source code must retain the above copyright
35.\"    notice, this list of conditions and the following disclaimer.
36.\" 2. Redistributions in binary form must reproduce the above copyright
37.\"    notice, this list of conditions and the following disclaimer in the
38.\"    documentation and/or other materials provided with the distribution.
39.\" 3. All advertising materials mentioning features or use of this software
40.\"    must display the following acknowledgement:
41.\"	This product includes software developed by John Birrell.
42.\" 4. Neither the name of the author nor the names of any co-contributors
43.\"    may be used to endorse or promote products derived from this software
44.\"    without specific prior written permission.
45.\"
46.\" THIS SOFTWARE IS PROVIDED BY JOHN BIRRELL AND CONTRIBUTORS ``AS IS'' AND
47.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
48.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
49.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
50.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
51.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
52.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
53.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
54.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
55.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
56.\" SUCH DAMAGE.
57.\"
58.\" $FreeBSD: src/lib/libpthread/man/pthread_once.3,v 1.14 2002/09/16 19:29:29 mini Exp $
59.\"
60.Dd January 30, 2003
61.Dt PTHREAD_ONCE 3
62.Os
63.Sh NAME
64.Nm pthread_once
65.Nd dynamic package initialization
66.Sh LIBRARY
67.Lb libpthread
68.Sh SYNOPSIS
69.In pthread.h
70.Pp
71pthread_once_t
72.Fa once_control
73= PTHREAD_ONCE_INIT;
74.Ft int
75.Fn pthread_once "pthread_once_t *once_control" "void (*init_routine)(void)"
76.Sh DESCRIPTION
77The first call to
78.Fn pthread_once
79by any thread in a process, with a given
80.Fa once_control ,
81will call the
82.Fn init_routine
83with no arguments.
84Subsequent calls to
85.Fn pthread_once
86with the same
87.Fa once_control
88will not call the
89.Fn init_routine .
90On return from
91.Fn pthread_once ,
92it is guaranteed that
93.Fn init_routine
94has completed.
95The
96.Fa once_control
97parameter is used to determine whether the associated initialization
98routine has been called.
99.Pp
100The function
101.Fn pthread_once
102is not a cancellation point.
103However, if
104.Fn init_routine
105is a cancellation point and is cancelled, the effect on
106.Fa once_control
107is as if
108.Fn pthread_once
109was never called.
110.Pp
111The constant
112.Fa PTHREAD_ONCE_INIT
113is defined by header
114.Aq Pa pthread.h .
115.Pp
116The behavior of
117.Fn pthread_once
118is undefined if
119.Fa once_control
120has automatic storage duration or is not initialized by
121.Fa PTHREAD_ONCE_INIT .
122.Sh RETURN VALUES
123If successful,  the
124.Fn pthread_once
125function will return zero.
126Otherwise an error number will be returned to
127indicate the error.
128.Sh ERRORS
129None.
130.Sh STANDARDS
131.Fn pthread_once
132conforms to
133.St -p1003.1-96 .
134