xref: /netbsd-src/lib/libpthread/pthread_key_create.3 (revision d710132b4b8ce7f7cccaaf660cb16aa16b4077a0)
1.\" $NetBSD: pthread_key_create.3,v 1.2 2003/06/08 06:44:31 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_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[PTHREAD_DESTRUCTOR_ITERATIONS] iterations of destructor calls for
106outstanding non-NULL values, there are still some non-NULL values with
107associated destructors, the implementation stops calling destructors.
108.Sh RETURN VALUES
109If successful, the
110.Fn pthread_key_create
111function will store the newly created key value at the location specified by
112.Fa key
113and returns zero.
114Otherwise an error number will be returned to indicate
115the error.
116.Sh ERRORS
117.Fn pthread_key_create
118shall fail if:
119.Bl -tag -width Er
120.It Bq Er EAGAIN
121The system lacked the necessary resources to create another thread-specific
122data key, or the system-imposed limit on the total number of keys per process
123[PTHREAD_KEYS_MAX] would be exceeded.
124.It Bq Er ENOMEM
125Insufficient memory exists to create the key.
126.El
127.Sh SEE ALSO
128.Xr pthread_getspecific 3 ,
129.Xr pthread_key_delete 3 ,
130.Xr pthread_setspecific 3
131.Sh STANDARDS
132.Fn pthread_key_create
133conforms to
134.St -p1003.1-96 .
135