xref: /netbsd-src/lib/libpthread/pthread_key_create.3 (revision 23c8222edbfb0f0932d88a8351d3a0cf817dfb9e)
1.\" $NetBSD: pthread_key_create.3,v 1.3 2003/07/04 11:48:59 wiz 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_key_create.3,v 1.12 2002/09/16 19:29:28 mini Exp $
59.\"
60.Dd January 30, 2003
61.Dt PTHREAD_KEY_CREATE 3
62.Os
63.Sh NAME
64.Nm pthread_key_create
65.Nd thread-specific data key creation
66.Sh LIBRARY
67.Lb libpthread
68.Sh SYNOPSIS
69.In pthread.h
70.Ft int
71.Fn pthread_key_create "pthread_key_t *key" "void (*destructor)(void *)"
72.Sh DESCRIPTION
73The
74.Fn pthread_key_create
75function creates a thread-specific data key visible to all threads in the
76process.
77Key values provided by
78.Fn pthread_key_create
79are opaque objects used to locate thread-specific data.
80Although the same
81key value may be used by different threads, the values bound to the key
82by
83.Fn pthread_setspecific
84are maintained on a per-thread basis and persist for the life of the calling
85thread.
86.Pp
87Upon key creation, the value NULL is associated with the new key in all
88active threads.
89Upon thread creation, the value NULL is associated with all
90defined keys in the new thread.
91.Pp
92An optional destructor function may be associated with each key value.
93At
94thread exit, if a key value has a non-NULL destructor pointer, and the
95thread has a non-NULL value associated with the key, the function pointed
96to is called with the current associated value as its sole argument.
97The
98order of destructor calls is unspecified if more than one destructor exists
99for a thread when it exits.
100.Pp
101If, after all the destructors have been called for all non-NULL values
102with associated destructors, there are still some non-NULL values with
103associated destructors, then the process is repeated.
104If, after at least
105.Dv PTHREAD_DESTRUCTOR_ITERATIONS
106iterations of destructor calls for
107outstanding non-NULL values, there are still some non-NULL values with
108associated destructors, the implementation stops calling destructors.
109.Sh RETURN VALUES
110If successful, the
111.Fn pthread_key_create
112function will store the newly created key value at the location specified by
113.Fa key
114and returns zero.
115Otherwise an error number will be returned to indicate
116the error.
117.Sh ERRORS
118.Fn pthread_key_create
119shall fail if:
120.Bl -tag -width Er
121.It Bq Er EAGAIN
122The system lacked the necessary resources to create another thread-specific
123data key, or the system-imposed limit on the total number of keys per process
124.Dv PTHREAD_KEYS_MAX
125would be exceeded.
126.It Bq Er ENOMEM
127Insufficient memory exists to create the key.
128.El
129.Sh SEE ALSO
130.Xr pthread_getspecific 3 ,
131.Xr pthread_key_delete 3 ,
132.Xr pthread_setspecific 3
133.Sh STANDARDS
134.Fn pthread_key_create
135conforms to
136.St -p1003.1-96 .
137