*** UNIX MANUAL PAGE BROWSER ***

A Nergahak database for man pages research.

Navigation

Directory Browser

1Browse 4.4BSD4.4BSD
1Browse Digital UNIXDigital UNIX 4.0e
1Browse FreeBSDFreeBSD 14.3
1Browse MINIXMINIX 3.4.0rc6-d5e4fc0
1Browse NetBSDNetBSD 10.1
1Browse OpenBSDOpenBSD 7.7
1Browse UNIX v7Version 7 UNIX
1Browse UNIX v10Version 10 UNIX

Manual Page Search

Manual Page Result

0 Command: tis_once | Section: 3 | Source: Digital UNIX | File: tis_once.3.gz
tis_once(3) Library Functions Manual tis_once(3) NAME tis_once - Calls an initialization routine that can be executed by only one thread, once. LIBRARY Standard C Library (libc.so, libc.a) SYNOPSIS #include <tis.h> int tis_once( pthread_once_t *once_control, void (*init_routine)(void)); STANDARDS None PARAMETERS Address of a record (control block) that defines the one-time initial- ization code. Each one-time initialization routine in static storage must have its own unique pthread_once_t record. Address of a procedure that performs the initialization. This routine is called only once, regardless of the number of times it and its associated once_control are passed to tis_once(3). DESCRIPTION The first call to this routine by a process with a given once_control calls the init_routine with no arguments. Thereafter, subsequent calls to tis_once(3) with the same once_control do not call the init_routine. On return from tis_once(3), it is guaranteed that the initialization routine has completed. For example, a mutex or a thread-specific data key must be created ex- actly once. In a threaded environment, calling tis_once(3) ensures that the initialization is serialized across multiple threads. The once_control argument must be statically initialized using the PTHREAD_ONCE_INIT macro or by zeroing out the entire structure. Note If you specify an init_routine that directly or indirectly results in a recursive call to tis_once(3) and that specifies the same init_block argument, the recursive call results in a deadlock. The PTHREAD_ONCE_INIT macro, defined in the <pthread.h> header file, must be used to initialize a once_control record. Thus, your program must declare a once_control record as follows: pthread_once_t once_control = PTHREAD_ONCE_INIT; Note that it is often easier to simply lock a statically initialized mutex, check a control flag, and perform necessary initialization (in- line) rather than using tis_once(3). For example, you can code an "init" routine that begins with the following basic logic: init() { static pthread_mutex_t mutex = PTHREAD_MUTEX_INIT; static int flag = FALSE; tis_mutex_lock(&mutex); if(!flag) { flag = TRUE; /* initialize code */ } tis_mutex_unlock(&mutex); } RETURN VALUES If an error condition occurs, this routine returns an integer value in- dicating the type of error. Possible return values are as follows: Successful completion. Invalid argument. ERRORS None RELATED INFORMATION Manuals: Guide to DECthreads and Programmer's Guide delim off tis_once(3)

Navigation Options