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