osf1 man page for pthread_once

Query: pthread_once

OS: osf1

Section: 3

Format: Original Unix Latex Style Formatted with HTML and a Horizontal Scroll Bar

pthread_once(3) 					     Library Functions Manual						   pthread_once(3)

NAME
pthread_once - Calls a routine to be executed by a single thread, once.
LIBRARY
DECthreads POSIX 1003.1c Library (libpthread.so)
SYNOPSIS
#include <pthread.h> int pthread_once( pthread_once_t *once_control, void (*routine)(void));
STANDARDS
Interfaces documented on this reference page conform to industry standards as follows: IEEE Std 1003.1c-1995, POSIX System Application Program Interface
PARAMETERS
Address of a record that controls the one-time execution code. Each one-time execution routine must have its own unique pthread_once_t record. Address of a procedure to be executed once. This routine is called only once, regardless of the number of times it and its asso- ciated once_control block are passed to pthread_once(3).
DESCRIPTION
The first call to this routine by any thread in a process with a given once_control will call the specified routine with no arguments. Subsequent calls to pthread_once(3) with the same once_control will not call the routine. On return from pthread_once(3), it is guaranteed that the routine has completed. For example, a mutex or a per-thread context key must be created exactly once. Calling pthread_once(3) ensures that the initialization is serialized across multiple threads. Other threads that reach the same point in the code would be delayed until the first thread is fin- ished. If you specify a routine that directly or indirectly results in a recursive call to pthread_once(3) and that specifies the same routine argument, the recursive call can result in a deadlock. To initialize the once_control record, your program can zero out the entire structure, or you can use the PTHREAD_ONCE_INIT macro, which is defined in the pthread.h header file, to statically initialize that structure. If using PTHREAD_ONCE_INIT, declare the 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 pthread_once(3). For example, code an initialization routine that begins with the following basic logic: init() { static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; static int flag = FALSE; pthread_mutex_lock(&mutex); if(!flag) { flag = TRUE; /* initialize code */ } pthread_mutex_unlock(&mutex); }
RETURN VALUES
If an error condition occurs, this routine returns an integer indicating the type of error. Possible return values are as follows: Suc- cessful completion. Invalid argument.
ERRORS
None
RELATED INFORMATION
Manuals: Guide to DECthreads and Programmer's Guide delim off pthread_once(3)
Related Man Pages
pthread_once(3p) - centos
pthread_key_create(3) - osf1
pthread_mutex_init(3) - osf1
pthread_once(3) - osf1
tis_once(3) - osf1
Similar Topics in the Unix Linux Community
Profiling..entry for a function in pthread_create
valgrind - pthread memory leaks on AIX
Linking problem
pthread locking and unlocking. U
C++ singleton